本文基于 OpenJDK17 进行讨论
关于 Recycler 对象池相关的实现细节,感兴趣的同学可以回看下 《详解Recycler对象池的精妙设计与实现》在比如,Netty 中的资源泄露探测工具 ResourceLeakDetector 也是通过 WeakReference 来探测资源是否存在泄露的,默认是开启的,但我们也可以通过 -Dio.netty.leakDetection.level=DISABLED 来关闭资源泄露探测。
这里只需要了解一下 Bits.reserveMemory 的焦点逻辑即可,相关的 native memory 回收细节可巧是本末节的主题,笔者背面会对这些细节进行先容。如果堆外内存容量足够,则通过 UNSAFE.allocateMemory 向 OS 申请 native memory 。
当然了 _reference_pending_list 链表中保存的不仅仅是 Cleaner 这个 PhantomReference,还有 WeakReference,SoftReference 对象,但它们共同的特点是这些 Reference 对象所引用的 Java 对象都已经被回收了。
参数 clear 就是 should_clear_soft_references 函数的返回值
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) | Powered by Discuz! X3.4 |