首页  

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<String> {
    @Override
    public void channelRead0(ChannelHandlerContext ctx, String request) throws Exception {
        ...  
    }
    ...   
}

public abstract class SimpleChannelInboundHandler<I> 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 泄露实例