Java 中有四种类型的引用:Strong、Soft、Weak 和 phantom。请详细说明 Java 究竟在何处以及如何使用幻像引用。
编辑 :
我确实阅读了 javaDoc,如下面的 assylias 所示。该部分说,如果一个对象已经完成并且一些幻像引用引用它,则该对象是幻像可回收的。我完全理解这种说法。
phantom 有什么用,在什么情况下我们应该使用它?
java.lang.ref
包 javadoc中描述了每种类型的参考是如何工作的:
从最强到最弱,不同级别的可达性反映了一个对象的生命周期。它们在操作上定义如下:
- 如果某个对象可以被某个线程访问而无需遍历任何引用对象,则该对象是强可达的。创建它的线程可以强烈访问新创建的对象。
- 如果一个对象不是强可达但可以通过遍历软引用来达到,那么它就是软可达的。
- 一个对象是弱可达的,如果它既不是强可达也不是软可达,但可以通过遍历弱引用来达到。当对弱可达对象的弱引用被清除时,该对象就有资格进行终结。
- 如果一个对象既不是强、软或弱可达的,它是最终确定的,并且一些幻象引用引用它,它就是幻象可达的。
- 最后,当一个对象无法通过上述任何一种方式到达时,它是不可达的,因此有资格进行回收。
Stack Overflow 上有几篇文章举例说明了您可能需要的方式和时间PhantomReference
: