java – 尽管没有对实际引用对象的强引用,但WeakReference不返回null

我正在阅读以下有关
java中弱引用的帖子: –

Understanding Weak References.

在完成理论部分之后,尝试测试无效条件的弱引用.但是,对于弱引用的null检查永远不会在以下代码中返回true: –

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,尽管widget引用被赋予null值.

谢谢.

解决方法

而不是等待垃圾收集,尝试使用Runtime.getRuntime().gc()自己调用它,然后检查弱引用为null.

只有在GC运行时才能回收弱可到达的对象.由于您的程序没有将任何更多对象实例化到堆上,因此如果不手动要求它运行,这可能永远不会发生.

dawei

【声明】:唐山站长网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。