class A {
}
public class Test {
public static void main(String[] args) throws Exception {
ReferenceQueue<A> queue = new ReferenceQueue<>();
WeakReference<A> ref = new WeakReference<>(new A(), queue);
System.out.println("ref.get() == null:" + (ref.get() == null));
Object obj = null;
obj = queue.poll();
System.out.println("obj == null:" + (obj == null));
System.gc();
System.out.println("ref.get() == null2:" + (ref.get() == null));
obj = queue.poll();
System.out.println("obj == null2:" + (obj == null));
System.out.println(obj instanceof A);
}
}
结果是:
ref.get() == null:false
obj == null:true
ref.get() == null2:true
obj == null2:false
false
我的问题是:在gc之后obj究竟是什么?我以前认为是A对象,但结果显示不是。那个参考资料是否已被列入队列?如果为true,则何时清除引用或队列何时为空?