首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ByteBuf使用的直接缓冲区没有完全释放

ByteBuf使用的直接缓冲区没有完全释放
EN

Stack Overflow用户
提问于 2018-06-22 09:35:33
回答 1查看 445关注 0票数 1

我正在使用Netty 4.1.17-决赛与直接缓冲区。

我们在测试程序中发送和接收100 MB的byte[],当解码器达到100 MB时,我们不做任何事情就丢弃它。

代码语言:javascript
复制
@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

我在下面问了一些相关的问题。

PooledUnsafeDirectByteBuf在DirectMemory中找不到

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-22 12:29:49

默认情况下,netty池缓冲区,因此,如果您使用默认分配程序,这就是这里的情况。

如果您不想池,您应该使用UnpooledByteBufAllocator。这可以在使用ChannelOption.ALLOCATOR引导期间进行配置。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50985018

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档