是否收集了Java DirectByteBuffer包装器垃圾?

是否收集了Java DirectByteBuffer包装器垃圾?,第1张

是否收集了Java DirectByteBuffer包装器垃圾?

在Sun
JDK中,由

java.nio.DirectByteBuffer
创建的
ByteBuffer#allocateDirect(int)
a具有类型字段
sun.misc.Cleaner
,该字段扩展为
java.lang.ref.PhantomReference

当此

Cleaner
(记住,是的子类型
PhantomReference
)被收集并即将移入关联时
ReferenceQueue
,通过嵌套类型运行的与集合相关的线程
ReferenceHandler
Cleaner
实例进行特殊处理:它向下转换并调用
Cleaner#clean()
,最终使它返回进行调用
DirectByteBuffer$Deallocator#run()
,依次进行调用
Unsafe#freeMemory(long)
。哇。

这相当circuit回,我很惊讶没有看到游戏中的任何使用

Object#finalize()
。Sun开发人员必须将其原因归结到更靠近收集和参考管理子系统的地方。

简而言之,

DirectByteBuffer
只要垃圾回收器有机会注意到这种放弃,并且其引用处理线程通过上述调用取得了进展,就不会因为放弃引用实例而耗尽内存。



欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/5488737.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-12-12
下一篇2022-12-12

发表评论

登录后才能评论

评论列表(0条)

    保存