我正在使用Netty 4.1.17-决赛与直接缓冲区。
我们在测试程序中发送和接收100 MB的byte[],当解码器达到100 MB时,我们不做任何事情就丢弃它。
@Override
public void decode(ByteBuffer _in, List<Object> _out) {
if (_in.remaining() == size) { // size = 100 * 1024 * 1024
_in.get(new byte[size]);
}
}在测试结束时,我显式地执行了GC,并试图睡上大约10秒,以期待Cleaner的发布。然而,直接缓冲区没有部分释放,但Netty没有报告ByteBuf中的漏洞。
我给这个测试程序提供了以下选项。
-Dio.netty.maxDirectMemory=0 -Dio.netty.leakDetection.level=PARANOID
我在下面问了一些相关的问题。
发布于 2018-06-22 12:29:49
默认情况下,netty池缓冲区,因此,如果您使用默认分配程序,这就是这里的情况。
如果您不想池,您应该使用UnpooledByteBufAllocator。这可以在使用ChannelOption.ALLOCATOR引导期间进行配置。
https://stackoverflow.com/questions/50985018
复制相似问题