【发布时间】:2011-12-03 09:40:31
【问题描述】:
我没有使用 PhantomReferences。实际使用的好例子似乎很少。
当一个幻影出现在您的队列中时,您如何知道它是/曾经是哪个对象? get() 方法似乎没用。根据the JavaDoc,
因为虚引用的所指对象总是不可访问的, 此方法始终返回 null。
我认为,除非您的对象是单例,否则您总是希望使用 PhantomReference 的 子类,您可以在其中放置所需的任何纪念品以了解死亡的原因。
这是正确的,还是我错过了什么?
对于软引用也是如此吗? 对于弱引用?
相关使用示例的链接会很棒。
【问题讨论】:
-
我第一次也是最后一次遇到幻像引用是在我攻读学位期间,我的主管认为它们几乎没用。
-
我想知道他是否考虑过对引用进行子类化。
-
@lynks,它们不是没用的,你可以用它们创建你自己的终结器。使用一些可运行的(实现或引用)进行子类化,这是一种常见的方式。或者,您可以使用身份映射 Phantom->Runnable。
sun.misc.Clearner是在 java 1.4 中引入的,有利于终结,所有 DirectBuffers 都使用它。
标签: java weak-references soft-references phantom-reference