《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对象吗??

解决方案 »

  1.   

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

  2.   

    垃圾回收器是在对象占用一定的存储空间的时候才执行的,不是实时回收,先是标记改对象为垃圾对象,而后回收
      

  3.   

    满足回收算法 才真正回收