Я пытался понять поведение 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);
}
}
В приведенном выше примере, если я назначаю holdLastObject
null, я получаю Total no of object garbage collected=9
. Если я этого не сделаю, я получаю 10
.
Может кто-нибудь объяснить это? Я не могу найти правильную причину.