我有以下代码将传入的FullHttpRequest
内容复制到单独的ByteBuf
中,以将其传递到另一个线程进行处理:
final ByteBuf requestContent;
requestContent = httpRequest.content().copy();
(我需要创建一个副本,因为从其他线程访问原始缓冲区将引发
IllegalReferenceCountException
)channel init方法如下所示:
ChannelPipeline p = ch.pipeline();
p.addLast(new HttpRequestDecoder());
p.addLast(new HttpObjectAggregator(maxRequestSize));
p.addLast(new HttpResponseEncoder());
p.addLast(httpServerHandler);
(没有明确的bytebuf池或任何东西)
问题是:在哪里创建拷贝?它是在jvm堆中创建的(jvm将自动
ByteBuf
)还是在netty池中的某个地方创建的,等待显式释放并造成内存泄漏? 最佳答案
Netty reference表示必须显式释放字节缓冲区,以避免内存泄漏。
关于java - 我是否需要显式释放FullHttpRequest.content()。copy()?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31266860/