netty 内存释放时机的疑惑

来源:4-6 NioEventLoop的启动

正义柔情永在

2018-10-23

老师,感谢您对我昨天提问的问题的解答.大致都明白了.印证了自己的理解.但是关于netty 对内存回收的这里,我仍然有以下几点不确定:
1:
图片描述
上图中的问题是:如果使用了SimpleChannelInboundHandler,那么形参中传递过来的buf是不需要手动回收的.而channelRead0内部如果自己申请的,或者其他任意地方申请的内存仍然需要手动回收. 这个对不对?
2: ctx.alloc().directBuffer(),Unpooled.directBuffer()两者都是堆外内存,唯一区别就是前者是池化的,后者未池化,两者使用结束后都必须进行回收.这个理解对不对?
3: ctx.write(buf) 这个buf不需要手动回收是不?
4: decode ( )中解码完毕后的buf,不需要手动回收,channelRead方法中会自动回收,是不?

写回答

1回答

正义柔情永在

提问者

2018-10-23

老师,我刚跟了一下代码,发现ByteToMessageDecoder 其实还是一个InHandler ,也就是说在pipline中,会触发器channelRead 方法, 我刚看了一下channelRead方法,这个方法会调用子类实现的decode方法,而且会在finnaly 中释放已经读取完毕的buf,这个才是在decode ()方法中释放bufe报错的原因.这个理解对不

0
1
闪电侠
嗯,重复释放是有问题的
2018-10-27
共1条回复

Java读源码之Netty深入剖析

解析netty各大组件细节,百万级性能调优,设计模式实际运用

2334 学习 · 283 问题

查看课程