如何在JBoss-Netty中使用无限制的帧大小而不浪费内存?

我探索netty以在VM之间传递对象.我使用ObjectEncoder& ObjectDecoder分别用于序列化这些.

我很快发现这个解决方案仅限于最大1MB大小的对象.由于我打算传达更大的对象,并且我不打算限制此大小,因此我使用Integer.MAX_VALUE来设置最大帧长度.

不幸的是,看起来这个值被用来初始化一些缓冲区,从而导致不必要的GC-ing,很可能在OutOfMemory中.

有没有办法在使用DynamicChannelBuffers时创建无限制的ObjectEncoder / Decoder,以免浪费太多内存?

解决方法:

ObjectDecoder扩展了LengthFieldBasedFrameDecoder,它扩展了FrameDecoder. FrameDecoder管理解码缓冲区,它使用初始容量为256的动态缓冲区.

但是,一旦收到大对象,动态缓冲区就会自行扩展,但不会缩小.如果你有多个交换大对象的连接,你的ObjectDecoder最终都会有一个非常大的缓冲区,可能导致OutOfMemoryError.

这个问题已于上周修复,本周将发布新版本(3.2.7.Final).

上一篇:阿里云OSS简单上传本地文件


下一篇:使用Autoencoder进行降维