ByteBuf使用的直接缓冲区尚未完全释放

时间:2018-06-22 09:35:33

标签: java memory netty direct-buffer

我正在使用Netty 4.1.17-Final和Direct Buffer。

我们在测试程序中发送和接收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。 但是,Direct Buffer并未部分发布,但Netty并未报告ByteBuf泄漏。

Direct Buffer graph link

我为测试程序提供了以下选项。
-Dio.netty.maxDirectMemory=0 -Dio.netty.leakDetection.level=PARANOID

我在下面问了相关问题。
PooledUnsafeDirectByteBuf not found in DirectMemory

1 个答案:

答案 0 :(得分:0)

默认情况下,netty pools缓冲,因此,如果使用默认分配器,则情况就是这样。

如果您不希望合并,则应使用UnpooledByteBufAllocator。可以在使用ChannelOption.ALLOCATOR进行引导的过程中进行配置。