我试图理解垃圾回收的行为,发现了一些有趣的东西,但是我无法理解。
请看代码和输出:
public class GCTest {
private static int i=0;
@Override
protected void finalize() throws Throwable {
i++; //counting garbage collected objects
}
public static void main(String[] args) {
GCTest holdLastObject; //If I assign null here then no of eligible objects are 9 otherwise 10.
for (int i = 0; i < 10; i++) {
holdLastObject=new GCTest();
}
System.gc(); //requesting GC
//sleeping for a while to run after GC.
try {
Thread.sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();
}
// final output
System.out.println("`Total no of object garbage collected=`"+i);
}
}
如果我将holdLastObject
赋值为null,则上面的示例中会得到垃圾回收的对象总数=9
。如果不这样做,我会得到10
。
有人能解释一下吗?我无法找到正确的原因。