初学者: 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对象吗??
------解决方案--------------------因为垃圾回收并不意味着,只要有垃圾,就会立即启动垃圾收集器。垃圾回收算法会在它认为合适的时候去回收。这个程序只执行一次,可能垃圾收集器并不会立即回收垃圾,当重复执行时,会产生更多的垃圾,就有可能让垃圾回收器回收了。