我想以粗体理解以下声明。这是什么意思?(链接)
覆盖的对象
finalize()
现在必须在至少两个单独的垃圾收集周期中被确定为垃圾才能被收集。当第一个循环确定它是垃圾时,它就有资格进行终结。由于对象在最终确定期间“复活”的可能性(很小,但不幸的是真实的),垃圾收集器必须再次运行,然后才能实际删除对象。并且因为终结可能没有及时发生,所以在对象等待终结时可能发生了任意数量的垃圾回收周期。这可能意味着实际清理垃圾对象的严重延迟,这就是为什么OutOfMemoryError
即使大部分堆都是垃圾也可以获得 s 的原因。
幻影参考解决了什么
使用 PhantomReference,这种情况是不可能的——当 PhantomReference 入队时,绝对没有办法获得指向现在已死对象的指针(这很好,因为它不再在内存中)。因为 PhantomReference 不能用于复活一个对象,所以可以在第一个垃圾回收周期中立即清理该对象,在该周期中发现它是幻影可访问的。
请帮助我了解问题和解决方案
谢谢