日期:2014-05-18  浏览次数:20750 次

初学者: java垃圾回收器
《java 编程思想》上的一个例子
class Book
{  boolean checkedOut=false; 
 Book(boolean checkOut){checkedOut=checkOut;}  
void checkIn(){checkedOut=false;}  
protected void finalize()  
{     if(checkedOut)       
System.out.println("Error:checked out");  }}
public class TerminationCondition
{public static void main(String args[])
{Book novel=new Book(true);
novel.checkIn();
new Book(true);
System.gc();}}
书上说:“注意,System.gc()用于强制进行终结动作。即使不这么做,通过重复的执行程序(假设程序将分配大量的存储空间而导致垃圾回收动作的执行),最终也能找出错误的Book对象”我想问,为什么上面那句话要说“重复的执行程序”,只执行一次不能找出错误的Book对象吗??

------解决方案--------------------
因为垃圾回收并不意味着,只要有垃圾,就会立即启动垃圾收集器。垃圾回收算法会在它认为合适的时候去回收。这个程序只执行一次,可能垃圾收集器并不会立即回收垃圾,当重复执行时,会产生更多的垃圾,就有可能让垃圾回收器回收了。