您好,我可以帮您理解PhantomReference。我知道PhantomReference可以帮助跟踪对象何时从堆中移除,并在finalize方法调用后仍然可达。我尝试通过一些代码来深入了解,但是我无法正确地实现,例如:
class Foo{
private String a;
public Foo(String a){
this.a = a;
}
@Override
protected void finalize() throws Throwable {
super.finalize();
System.out.println("calling finalize");
}
@Override
public String toString() {
return "Foo{" + "a=" + a + '}';
}
}
我认为做这样的事情:
ReferenceQueue q = new ReferenceQueue();
PhantomReference<Foo> pr = new PhantomReference(new Foo("myphantom"), q);
System.out.println("Object created trying to gc");
System.gc();
Thread.sleep(5000L);
System.out.println(q.poll());
我将给你一个PhantomReference的实例,但我得到的是null。