首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么Netty ByterBuf.readBytes会导致内存泄漏?

为什么Netty ByterBuf.readBytes会导致内存泄漏?
EN

Stack Overflow用户
提问于 2021-07-06 12:13:35
回答 1查看 91关注 0票数 0

ByteToMessageDecoder评论说:“如果返回的缓冲区没有被释放或添加到out列表中,ByteBuf.readBytes(int)等一些方法将导致内存泄漏。使用像ByteBuf.readSlice(int)这样的派生缓冲区来避免内存泄漏。“

我有点困惑,ByteBuf.readSlice将与父级共享refCnt和buffer,而ByteBuf.readBytes将有一个新的refCnt (初始为1)和一个新的buffer。

那么,为什么添加ByteBuf.readBytes创建的新ByteBuf会导致内存泄漏呢?我想我可以释放添加到out列表中的新ByteBuff,并且不会导致内存泄漏。

当使用ByteBuf.readSlice时,它会与parentBuffer共享refCnt,但ByteToMessageDecoder#channelRead会重新释放父缓冲区,我认为这会导致readSlice创建的ByteBuf无法再使用。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-14 02:58:35

readBytes(...)将返回一个已分配的新ByteBuf,因此需要释放该and以确保不会观察到内存泄漏。另一方面,readSlice(...)只是将指向相同内部存储的ByteBuf“切片”出来,因此与原始ByteBuf共享相同的引用计数。

所以,是的,如果您释放缓冲区,它将不会发生内存泄漏。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68264452

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档