Object.finalize()不输出

时间:2017-05-18 05:13:18

标签: java

课程测试是:

public class Test {
private final Object finalizerGuardian = new Object() {
    @Override
    protected void finalize() throws Throwable {
        System.out.println("finalize");
        super.finalize();
    }
};

public static void main(String args[]) {
    Test s = new Test("s");
    s = null;
   }
}

finalize方法api doc是:

  

当垃圾收集确定没有对该对象的更多引用时,由对象上的垃圾收集器调用。

但是当主方法执行得很好时 我看不到输出"敲定" 那么,如何查看输出

1 个答案:

答案 0 :(得分:1)

您理解垃圾收集器调用finalize方法是正确的。

但是,您需要了解在执行Java程序时,JVM根本不必调用垃圾收集器。

当JVM确定当前分配的内存不足以继续运行程序时,通常会调用垃圾收集器,因此它会尝试通过在此时调用垃圾收集器来释放内存。

但是如果你试图运行一个不太占用内存的小程序,JVM可能根本不会调用垃圾收集。毕竟,JVM在完成程序运行后仍会停止运行。那么如果JVM不再需要那个内存,那么JVM在完成程序运行后会怎么做呢?

这意味着在这种情况下永远不会调用finalize方法。

希望这有帮助!