为引用变量赋值时的 GC 行为
我试图理解GC的行为,我发现了一些我感兴趣的东西,我无法理解。
请参阅代码和输出:
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);
}
}
在上面的例子中,如果我分配给null,那么我得到.如果我不这样做,我会得到.holdLastObject
Total no of object garbage collected=9
10
有人可以解释一下吗?我无法找到正确的原因。