我在 Netty 中有两个场景,我试图最小化内存副本并优化内存使用:
(1) 读取一个非常大的帧(20 兆比特)。
(2) 读取大量非常小的帧(20 兆比特,每帧 50 比特)以在管道中的更高级别重建为一条消息。
对于第一种情况,当我在帧的开头得到一个长度时,我扩展了 FrameDecoder。不幸的是,由于我没有看到如何将长度返回给 Netty(我只指出帧是否完整),我相信 Netty 正在经历多个填充缓冲区、复制和重新分配周期,因此使用的内存比所需的更多。我在这里缺少什么吗?或者如果我期望这种情况,我应该完全避免使用 FrameDecoder 吗?
在第二种情况下,我目前正在创建我使用 ChannelBuffers.wrappedBuffer 包装的所有小帧的链接列表(然后我可以将其包装在 ChannelBufferInputStream 中),但我再次使用的内存比我预期的要多得多(也许因为分配的 ChannelBuffers 有空闲空间?)。这是使用 Netty ChannelBuffers 的正确方法吗?