请考虑以下代码:
public static final ReferenceQueue<Object> REF_QUEUE = new ReferenceQueue<>();
public class Foo extends PhantomReference<Object> {
public Foo(Object obj) { super(obj, REF_QUEUE); }
}
public class Bar {
private Foo foo;
public void refTest() {
foo = new Foo(new Apple("Cortland"));
foo = null;
}
}
PhantomReference的文档中写道:
如果垃圾回收器在某个时间点确定幻影引用的引用对象是幻影可达的,则在该时间或稍后的某个时间,垃圾回收器将使该引用入队.
然而,在refTest
方法中,Cortland Apple变得不可访问--而不是幻影可访问--因为包含它的foo是不可访问的.Foo对象是否会在ref_Queue上排队?