2023-09-13  阅读(2)
原文作者:https://blog.csdn.net/wangwei19871103/category_9681495_2.html 原文地址: https://blog.csdn.net/wangwei19871103/article/details/104455973

PooledByteBuf

前面介绍了一大堆内存管理,对象池的东西,就是为了讲这个,现在再去理解容易多了。

202309132205339011.png
跟前面的UnpooledHeapByteBuf类似的继承结构,也是继承引用计数的。

主要属性

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

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

202309132205343592.png
其他就是实现了一些常规的字节缓冲区方法,我就不多介绍了,可用自己去看看。

PooledHeapByteBuf

202309132205350893.png
是上面的子类,作为具体的缓冲区实例。
这个类会有一个对象池:

202309132205361814.png
通过这个静态方法获取对象:

202309132205367955.png
获得之后重新设置属性即可:

202309132205372716.png

PooledDirectByteBuf

这个也类似:

202309132205378687.png
对于他来说,这些方法是不支持的,因为他是在堆外的,只有地址,他的memory是直接缓冲区DirectByteBuffer,所有操作都是根据:

202309132205383968.png

PooledUnsafeDirectByteBuf

跟上面类似,只是用了unsafe获取直接缓冲区在堆外的地址memoryAddress,所有的操作几乎都用UnsafeByteBufUtil来操作地址偏移来完成。比如:

202309132205393109.png

2023091322053996410.png

2023091322054046511.png
最后就是JNI的方法:

2023091322054117312.png

PooledUnsafeHeapByteBuf

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

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

ThreadLocalDirectByteBuf

2023091322054163413.png
还有一个可以池化的也补充下吧,这个是在ByteBufUtil内部的,是也是有对象池的,但是是UnpooledDirectByteBuf子类。

2023091322054330114.png
释放的时候可以根据参数设定,是直接释放了,还是放入对象池。

2023091322054519915.png

ThreadLocalUnsafeDirectByteBuf

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

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


Java 面试宝典是大明哥全力打造的 Java 精品面试题,它是一份靠谱、强大、详细、经典的 Java 后端面试宝典。它不仅仅只是一道道面试题,而是一套完整的 Java 知识体系,一套你 Java 知识点的扫盲贴。

它的内容包括:

  • 大厂真题:Java 面试宝典里面的题目都是最近几年的高频的大厂面试真题。
  • 原创内容:Java 面试宝典内容全部都是大明哥原创,内容全面且通俗易懂,回答部分可以直接作为面试回答内容。
  • 持续更新:一次购买,永久有效。大明哥会持续更新 3+ 年,累计更新 1000+,宝典会不断迭代更新,保证最新、最全面。
  • 覆盖全面:本宝典累计更新 1000+,从 Java 入门到 Java 架构的高频面试题,实现 360° 全覆盖。
  • 不止面试:内容包含面试题解析、内容详解、知识扩展,它不仅仅只是一份面试题,更是一套完整的 Java 知识体系。
  • 宝典详情:https://www.yuque.com/chenssy/sike-java/xvlo920axlp7sf4k
  • 宝典总览:https://www.yuque.com/chenssy/sike-java/yogsehzntzgp4ly1
  • 宝典进展:https://www.yuque.com/chenssy/sike-java/en9ned7loo47z5aw

目前 Java 面试宝典累计更新 400+ 道,总字数 42w+。大明哥还在持续更新中,下图是大明哥在 2024-12 月份的更新情况:

想了解详情的小伙伴,扫描下面二维码加大明哥微信【daming091】咨询

同时,大明哥也整理一套目前市面最常见的热点面试题。微信搜[大明哥聊 Java]或扫描下方二维码关注大明哥的原创公众号[大明哥聊 Java] ,回复【面试题】 即可免费领取。

阅读全文