gpt4 book ai didi

Java PhantomReference

转载 作者:搜寻专家 更新时间:2023-11-01 03:35:17 28 4
gpt4 key购买 nike

你能帮我理解 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。

最佳答案

这对我有用。

        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

关于Java PhantomReference,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33916607/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com