我是否需要显式释放FullHttpRequest.content()。copy()?

时间:2015-07-07 11:06:16

标签: java http memory-leaks netty

我有以下代码将传入的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池中的某处创建,等待显式发布并创建内存泄漏?

1 个答案:

答案 0 :(得分:1)

Netty reference表示必须明确释放字节缓冲区以避免内存泄漏。