gpt4 book ai didi

java - ByteBuf使用的Direct Buffer没有完全释放

转载 作者:太空宇宙 更新时间:2023-11-04 10:22:18 25 4
gpt4 key购买 nike

我正在使用带有直接缓冲区的 Netty 4.1.17-Final。

我们在测试程序中发送和接收 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,并尝试 hibernate 约 10 秒以等待 Cleaner 的释放。不过,Direct Buffer 并未部分释放,但 Netty 并未报告 ByteBuf 泄漏。

Direct Buffer graph link

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

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

最佳答案

默认情况下,netty 池会缓冲,因此如果您使用默认分配器,则会出现这种情况。

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

关于java - ByteBuf使用的Direct Buffer没有完全释放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50985018/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com