netty ByteBuf 释放说明
所属分类 netty
浏览量 1620
ByteBuf heapBuffer = ctx.alloc().heapBuffer();
ReferenceCountUtil.release(heapBuffer);
三种自动释放方法
通过 TailHandler 自动释放入站 ByteBuf
继承 SimpleChannelInboundHandler 转换完成后 释放 入站ByteBuf
通过 HeadHandler 自动释放出站 ByteBuf
入站处理,如果对原消息不做处理,默认会调用 ctx.fireChannelRead(msg) 把原消息往下传,由流水线最后一棒 TailHandler 完成自动释放。
如果截断了入站处理流水线,可以继承 SimpleChannelInboundHandler ,完成入站ByteBuf 自动释放。
出站处理,通过 HeadHandler 完成自动释放。 在flush完成后释放掉
没有传递下去的ByteBuf需要手动释放,避免内存泄露。
@Sharable
public class TelnetServerHandler extends SimpleChannelInboundHandler {
@Override
public void channelRead0(ChannelHandlerContext ctx, String request) throws Exception {
...
}
...
}
public abstract class SimpleChannelInboundHandler extends ChannelInboundHandlerAdapter
@Override
public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
boolean release = true;
try {
if (acceptInboundMessage(msg)) {
@SuppressWarnings("unchecked")
I imsg = (I) msg;
channelRead0(ctx, imsg);
} else {
release = false;
ctx.fireChannelRead(msg);
}
} finally {
if (autoRelease && release) {
ReferenceCountUtil.release(msg);
}
}
}
上一篇
下一篇
top使用技巧
netty4耗时业务处理实例
netty性能优化点
eclipse使用用技巧
netty ByteBuf 实战
netty ByteBuf 泄露实例