吃透Netty源码系列三十四之PooledByteBuf相关补充

PooledByteBuf

前面介绍了一大堆内存管理,对象池的东西,就是为了讲这个,现在再去理解容易多了。
在这里插入图片描述
跟前面的UnpooledHeapByteBuf类似的继承结构,也是继承引用计数的。

主要属性

下面的属性基本上都讲到过了。

  • recyclerHandle,用于对象池的回收。
  • chunk,表示分配在哪个块上。
  • handle,表示在块上分配的偏移地址。
  • memory,具体内存形式,堆内就是字节数组,对外就是DirectByteBuffer
  • offset,避免缓存行出现假共享。
  • length,请求的内存大小。
  • maxLength,规范后的内存大小,最大能用的空间
  • cache,线程本地缓存,优先从缓存获取可用的块和句柄信息

在这里插入图片描述
其他就是实现了一些常规的字节缓冲区方法,我就不多介绍了,可用自己去看看。

PooledHeapByteBuf

在这里插入图片描述
是上面的子类,作为具体的缓冲区实例。
这个类会有一个对象池:
在这里插入图片描述
通过这个静态方法获取对象:
在这里插入图片描述
获得之后重新设置属性即可:
在这里插入图片描述

PooledDirectByteBuf

这个也类似:
在这里插入图片描述
对于他来说,这些方法是不支持的,因为他是在堆外的,只有地址,他的memory是直接缓冲区DirectByteBuffer,所有操作都是根据:
在这里插入图片描述

PooledUnsafeDirectByteBuf

跟上面类似,只是用了unsafe获取直接缓冲区在堆外的地址memoryAddress,所有的操作几乎都用UnsafeByteBufUtil来操作地址偏移来完成。比如:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
最后就是JNI的方法:
在这里插入图片描述

PooledUnsafeHeapByteBuf

也是类似的,很多操作都在JNI里进行了。

至此池化的缓冲区基本上都介绍完了,主要还对象池,回收器,内存分配三大块。

ThreadLocalDirectByteBuf

在这里插入图片描述
还有一个可以池化的也补充下吧,这个是在ByteBufUtil内部的,是也是有对象池的,但是是UnpooledDirectByteBuf子类。

在这里插入图片描述
释放的时候可以根据参数设定,是直接释放了,还是放入对象池。
在这里插入图片描述

ThreadLocalUnsafeDirectByteBuf

类似的原理,也不多说了。

好了,今天就到这里了,希望对学习理解有帮助,大神看见勿喷,仅为自己的学习理解,能力有限,请多包涵。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值