当我使用弱引用时希望通过引用队列来回收弱引用对象发现引用队列怎么都获取不到回收的弱引用对象,如下:
/**
* @author: @zyz
*/
public class ReferenceTest6 {
private static final int _4MB = 4 * 1024 * 1024;
public static void main(String[] args) throws InterruptedException {
// 引用队列
ReferenceQueue<byte[]> queue = new ReferenceQueue<>();
WeakReference <byte[]> ref = new WeakReference<>(new byte[_4MB], queue);
WeakReference <byte[]> ref1 = new WeakReference<>(new byte[_4MB], queue);
WeakReference <byte[]> ref2 = new WeakReference<>(new byte[_4MB], queue);
System.gc ();
Reference<? extends byte[]> poll = queue.poll();
while( poll != null) {
System.out.println ("回收");
poll = queue.poll();
}
}
}
// 结果为什么都不输出
经过各种查资料最终发现,当你调用System.gc()时, 只是告诉gc进行一次回收动作,但是回收什么还是由gc自己决定的,通过以下代码证明:
/**