java – 尽管没有对实际引用对象的强引用,但WeakReference不返回null
发布时间:2020-07-09 06:36:48 所属栏目:Java 来源:互联网
导读:我正在阅读以下有关 java中弱引用的帖子: – Understanding Weak References. 在完成理论部分之后,尝试测试无效条件的弱引用.但是,对于弱引用的null检查永远不会在以下代码中返回true: – package com.weak;import java.lang.ref.WeakReference;class Widge
|
我正在阅读以下有关 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运行时才能回收弱可到达的对象.由于您的程序没有将任何更多对象实例化到堆上,因此如果不手动要求它运行,这可能永远不会发生. (编辑:鄂州站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
