请理解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。
答案 0 :(得分:1)
这对我有用。
ReferenceQueue<Foo> q = new ReferenceQueue<Foo>();
PhantomReference<Foo> pr = new PhantomReference<Foo>(new Foo("myphantom"), q);
System.gc();
System.runFinalization();
System.gc();
System.runFinalization();
// Reference<? extends Foo> remove = q.remove(5000L);
System.out.println(q.poll());
我在这里得到了你问题的答案:Java: PhantomReference, ReferenceQueue and finalize