finalize()没有被调用

daf*_*unk 3 java finalize

为什么finalize()不在这里被称为.代码编译并成功运行,但没有任何输出.

package temp;

public class Temp {

    int i;

    Temp(int j) {
        i = j;
    }

    public void finalize() {
        if (i == 10) {
            System.out.println("Finalize called.");
        }
    }

    public static void main(String[] args) {
        Temp obj = new Temp(10);
        System.gc();
    }

}
Run Code Online (Sandbox Code Playgroud)

Era*_*ran 6

您的调用System.gc();没有任何区别,因为您的Temp实例具有引用(obj),因此它不符合垃圾回收的条件.

即使它有资格进行垃圾收集,调用System.gc();也不一定会收集所有没有立即引用它们的对象.

  • 此外,即使在调用System.gc()之后也无法保证垃圾收集.因此可能不会调用finalize. (3认同)