请帮我解释下关于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()。