我需要显式释放 FullHttpRequest.content().copy() 吗?
Do I need to explicitly release FullHttpRequest.content().copy()?
我有以下代码可以将传入的 FullHttpRequest
内容复制到单独的 ByteBuf
中,以将其传递给另一个线程进行处理:
final ByteBuf requestContent;
requestContent = httpRequest.content().copy();
(我需要创建一个副本,因为从其他线程访问原始缓冲区会引发 IllegalReferenceCountException
)
通道初始化方法如下所示:
ChannelPipeline p = ch.pipeline();
p.addLast(new HttpRequestDecoder());
p.addLast(new HttpObjectAggregator(maxRequestSize));
p.addLast(new HttpResponseEncoder());
p.addLast(httpServerHandler);
(没有明确的 bytebuf 池或任何东西)
问题是:ByteBuf
副本是在哪里创建的?它是在 JVM 堆中创建的(并将由 JVM 自动 GC
编辑)还是在 netty 池中的某处创建,等待显式 释放 并造成内存泄漏?
Netty reference 表示必须显式释放字节缓冲区以避免内存泄漏。
我有以下代码可以将传入的 FullHttpRequest
内容复制到单独的 ByteBuf
中,以将其传递给另一个线程进行处理:
final ByteBuf requestContent;
requestContent = httpRequest.content().copy();
(我需要创建一个副本,因为从其他线程访问原始缓冲区会引发 IllegalReferenceCountException
)
通道初始化方法如下所示:
ChannelPipeline p = ch.pipeline();
p.addLast(new HttpRequestDecoder());
p.addLast(new HttpObjectAggregator(maxRequestSize));
p.addLast(new HttpResponseEncoder());
p.addLast(httpServerHandler);
(没有明确的 bytebuf 池或任何东西)
问题是:ByteBuf
副本是在哪里创建的?它是在 JVM 堆中创建的(并将由 JVM 自动 GC
编辑)还是在 netty 池中的某处创建,等待显式 释放 并造成内存泄漏?
Netty reference 表示必须显式释放字节缓冲区以避免内存泄漏。