然而,根据http://www.ibm.com/developerworks/library/j-refs/,PhantomReference在堆对象被释放之前添加到其ReferenceQueue中,而WeakReferences在最终确定或垃圾回收之后添加到其ReferenceQueue中。差异在于排队的时间点。 当指向的对象变成弱可达时,弱引用立即排队, 这是在最终确定或垃圾回收实际发生之前; 理论上,该对象甚至可以通过非正规的finalize()方法"复活", 但弱引用将保持死亡状态。 而只有当对象从内存中被物理删除时,幽灵引用才会排队, 并且get()方法始终返回null,特别是为了防止您能够"复活"一个几乎死亡的对象。
我很困惑。哪一个是正确的?与软引用和弱引用不同,幽灵引用在释放堆对象之前将被添加到其ReferenceQueue中。 (请记住,所有PhantomReference对象都必须与关联的ReferenceQueue一起创建。) 这允许在回收堆对象之前采取行动。
当堆对象的finalize()方法运行并且其内存被释放时, 如果存在,则将WeakReference对象添加到其ReferenceQueue中。
基本上我想知道弱引用和幽灵引用与引用队列相关的区别。