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逻辑上组合到一起,避免内存复制。

相关推荐
上78将14 小时前
JVM回收垃圾机制
java·开发语言·jvm
Evan芙14 小时前
shell编程求10个随机数的最大值与最小值
java·linux·前端·javascript·网络
张人玉14 小时前
C#Https协议相关知识点
开发语言·https·c#
BD_Marathon14 小时前
【IDEA】IDEA的详细设置
java·ide·intellij-idea
未来coding14 小时前
Spring AI ChatModel API 详解【基于官方文档】
java·后端·spring
忘记92614 小时前
重复注解的机制是什么
java
喜欢流萤吖~14 小时前
Servlet 生命周期详解
java·servlet
刘一说14 小时前
JDK 25新纪元:技术革新与老项目迁移的冷思考
java·开发语言
Byron Loong14 小时前
【C#】VS调试——带参调试
开发语言·c#
无限进步_14 小时前
C语言双向循环链表实现详解:哨兵位与循环结构
c语言·开发语言·数据结构·c++·后端·算法·链表