日期:2014-05-20  浏览次数:20729 次

请帮我解释下关于gc的程序,谢谢
class   Book{
        boolean   checkedOut   =   false;
        Book(boolean   checkOut){
                checkedOut   =   checkOut;
        }
        void   checkIn(){
                checkedOut   =   false;
        }
        public   void   finalize(){
                if(checkedOut)
                        System.out.println( "error   :   checked   out ");
        }
}
public   class   Test3   {
        public   static   void   main(String[]   args){
                Book   novel   =   new   Book(true);
                novel.checkIn();
                new   Book(true);
                System.gc();
                System.out.println( "Test   = "+novel.checkedOut);
        }
}

本程序是thinking   in   java   中的一个例子,最后一句是我加上去的.
1.无最后一句显示结果是:error   :   checked   out
2.加上最后一句是:
                              Test   =   false
                                error   :   checked   out
3.将System.gc();注释掉   的显示结果是:
                              Test   =   false
问题是第2句,为什么system在回收之后,但显示的打印却是先打印出Test   =   false
第3句,显示打印结果是Test   =   false   是不是因为当时的变量还没有被回收掉的原因啊,请教大家给我个解释,最好详细点,谢谢

------解决方案--------------------
试了下,第2个问题我的执行结果和你不同!
error : checked out
Test =false

Process completed.

------解决方案--------------------
System.gc()方法是告诉jvm尽快回收,并不保证会立即进行回收内存,只有当内存不够,jvm才会真正的回收,回收前会调用该对象的finalize()。