请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

netty 内存释放时机的疑惑

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

正在回答 回答被采纳积分+3

1回答

提问者 正义柔情永在 2018-10-23 12:56:00

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

0 回复 有任何疑惑可以回复我~
  • 嗯,重复释放是有问题的
    回复 有任何疑惑可以回复我~ 2018-10-27 07:55:31
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信