知识卡片

引用计数管理堆外内存

专业/工作 · 1300.a

内容

Netty的ByteBuf默认用堆外内存,不受JVM垃圾回收器管理,靠引用计数手动释放:创建时引用计数为1,retain()加一,release()减一,减到零才回收底层内存。谁调用retain()增加引用,就必须调用一次release(),遗漏会造成内存泄漏,多释放则会在读写时直接报错。发散:这是把GC职责从运行时下放给开发者,用确定性释放换取脱离堆管理的性能优势,代价是额外资源管理心智负担。

参考来源

《跟闪电侠学Netty:Netty即时聊天实战与底层原理》第7章《数据载体ByteBuf的介绍》