JDK 8では、次のコードを実行した結果、毎回A
がファイナライズされることがわかりました。最後にprintlnをコメント解除すると、A
は決してファイナライズされません。メインスレッドで使用されているオブジェクトのファイナライズ
public class A {
@Override protected void finalize() {
System.out.println(this + "object is eligible for garbage collection");
}
public static void main(String[] args) {
A a = new A();
System.out.println("Main thread created object " + a);
for (int i = 0; i < 1000000000; i++) {
if (i % 100000000 == 0)
// Force GC
System.gc();
}
//If i un-comment below it won't do garbage collection ever
// System.out.println(a + "is residing on heap and is alive");
}
}
いくつかのいずれかは、それがその後、確定していない理由を、)(syso後に何が起こるのか、私にこの動作を説明することができます。
あなたは 'gc'' A'を行うときに、なぜあなたは私がガベージコレクション –
* *によってひとつひとつの時間を意味していますが使用されていません。あなたが 'a'をまだ使用中であるとコメントを外す場合 –
の100%保証を意味する一つ一つの時間では –