我通过下面的帖子在Java回事弱引用没有强引用: -WeakReference的不返回null,虽然有实际的参考对象
Understanding Weak References.
通过后去理论部分,试图对空条件的弱参考进行测试。但是,对于弱引用空检查从未返回下面的代码真: -
package com.weak;
import java.lang.ref.WeakReference;
class Widget{}
public class WeakReferenceDemo {
public static void main(String[] args) throws InterruptedException {
Widget widget = new Widget() ;
WeakReference<Widget> valueWrapper = new WeakReference<Widget>(widget) ;
System.out.println(valueWrapper.get());
//here strong reference to object is lost
widget = null ;
int count = 0 ;
//here checking for null condition
while(valueWrapper.get() != null){
System.out.print(".");
Thread.sleep(432) ;
if(++count % 25 == 0) System.out.println();
}
System.out.println(valueWrapper.get());
}
}
请建议,为什么valueWrapper.get()没有返回null,虽然构件引用赋值为null值。
谢谢。
GC不是引用计数,当您将该引用归为空时,GC甚至不知道它 - 它会在下一个GC周期中找到它。 – harold
@harold:upvoting。 – mogli