黑马程序员技术交流社区

标题: 一个关于弱引用的问题 [打印本页]

作者: talkyong    时间: 2013-3-8 11:55
标题: 一个关于弱引用的问题
如下代码垃圾回收时,弱引用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
作者: scott0610    时间: 2013-3-8 12:12
System.gc();只是告诉系统需要进行垃圾回收,但不代表调用该方法,就立刻执行垃圾回收。
如果你使用对象调用finalize()方法,同样也只是告诉系统需要进行垃圾回收,但不代表调用该方法,就立刻执行垃圾回收。
程序员是无法精确控制垃圾回收的时间和顺序的。

希望对你有所帮助!
作者: 刘峰    时间: 2013-3-8 12:54
System.gc()
上面的方法调用时用于显式通知JVM可以进行一次垃圾回收,但真正垃圾回收机制具体在什么时间点开始发生动作这同样是不可预料的,也不是由程序员控制的,
要了解更多的java垃圾回收,网上有很多资料的




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2