A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© talkyong 中级黑马   /  2013-3-8 11:55  /  1252 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

如下代码垃圾回收时,弱引用wf为何没被清掉?
    String str = new String("Hi");
                ReferenceQueue rq = new ReferenceQueue();
                WeakReference wf = new WeakReference(str, rq);
                SoftReference<String> sr=new SoftReference<String>(str);
                str=null;               
                System.gc();
                System.gc();        
                String str2=sr.get();
                String str1=(String) wf.get();               
                System.out.println("str1:"+str1);
                System.out.println("str2:"+str2);
输出结果为:
        str1:Hi
        str2:Hi

2 个回复

倒序浏览
System.gc();只是告诉系统需要进行垃圾回收,但不代表调用该方法,就立刻执行垃圾回收。
如果你使用对象调用finalize()方法,同样也只是告诉系统需要进行垃圾回收,但不代表调用该方法,就立刻执行垃圾回收。
程序员是无法精确控制垃圾回收的时间和顺序的。

希望对你有所帮助!
回复 使用道具 举报
System.gc()
上面的方法调用时用于显式通知JVM可以进行一次垃圾回收,但真正垃圾回收机制具体在什么时间点开始发生动作这同样是不可预料的,也不是由程序员控制的,
要了解更多的java垃圾回收,网上有很多资料的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马