Netty 组件介绍 - ByteBuf

直接内存&堆内存

java 复制代码
   ByteBuf buffer = ByteBufAllocator.DEFAULT.heapBuffer(10);

   ByteBuf byteBuf = ByteBufAllocator.DEFAULT.directBuffer(10);

组成

ByteBuf维护了两个不同的索引,一个用于读取,一个用于写入。

写入

内存回收

  • 堆内存使用的是JVM内存,等待GC即可。
  • 直接内存,建议手动回收内存

Netty采用引用计数法来控制回收内存。谁是最终使用者,谁来释放ButeBuf.

  • 每个ByteBuf对象的初始计数为1
  • 调用relase方法计数减1,如果计数为0,ByteBuf被回收
  • 调用retain方法啊计数加一,表示调用者没用完之前,其他hander即使调用了release也不会造成回收。

slice

对原始的ByteBuf进行切片成多个ButeBuf,切片后的ButeBuf拥有独立的读写指针。切片后对最大容量做了限制。

composite

将ByteBuf逻辑上组合到一起,避免内存复制。

相关推荐
猫头虎18 分钟前
【Python系列PyCharm实战】ModuleNotFoundError: No module named ‘sklearn’ 系列Bug解决方案大全
android·开发语言·python·pycharm·bug·database·sklearn
北执南念26 分钟前
JDK 动态代理和 Cglib 代理的区别?
java·开发语言
盛夏绽放39 分钟前
Python 目录操作详解
java·服务器·python
贰拾wan40 分钟前
ArrayList源码分析
java·数据结构
Code季风41 分钟前
跨语言RPC:使用Java客户端调用Go服务端的JSON-RPC服务
java·网络协议·rpc·golang·json
豆沙沙包?1 小时前
2025年- H82-Lc190--322.零钱兑换(动态规划)--Java版
java·算法·动态规划
学掌门1 小时前
用Python做数据分析之数据处理及数据提取
开发语言·python·数据分析
钢铁男儿1 小时前
C#结构体性能暴击指南:从内存陷阱到零损耗实战
开发语言·c#
都叫我大帅哥2 小时前
背压(Backpressure):响应式编程的“流量控制艺术”
java·flux