У меня есть два сценария в Netty, где я пытаюсь минимизировать количество копий памяти и оптимизировать использование памяти:
(1) Чтение очень большого кадра (20 Мегабит).
(2) Чтение большого количества очень маленьких кадров (20 мегабит по 50 бит на кадр) для перестройки в одно сообщение на более высоком уровне конвейера.
Для первого сценария, когда я получаю длину в начале кадра, я расширил FrameDecoder. К сожалению, поскольку я не вижу, как вернуть длину Netty (я только указываю, завершен ли кадр или нет), я полагаю, что Netty проходит несколько циклов заполнения буфера, копирования и перераспределения, таким образом используя больше памяти, чем требуется. Есть ли что-то, что мне здесь не хватает? Или мне следует полностью избегать FrameDecoder, если я ожидаю такого сценария?
Во втором сценарии я в настоящее время создаю связанный список всех маленьких фреймов, которые я оборачиваю с помощью ChannelBuffers.wrappedBuffer (который затем я могу обернуть в ChannelBufferInputStream), но я снова использую гораздо больше памяти, чем ожидал (возможно, потому что в выделенных ChannelBuffers есть свободное место?). Это правильный способ использования Netty ChannelBuffers?