课程测试是:
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是:
当垃圾收集确定没有对该对象的更多引用时,由对象上的垃圾收集器调用。
但是当主方法执行得很好时 我看不到输出"敲定" 那么,如何查看输出
答案 0 :(得分:1)
您理解垃圾收集器调用finalize
方法是正确的。
但是,您需要了解在执行Java程序时,JVM根本不必调用垃圾收集器。
当JVM确定当前分配的内存不足以继续运行程序时,通常会调用垃圾收集器,因此它会尝试通过在此时调用垃圾收集器来释放内存。
但是如果你试图运行一个不太占用内存的小程序,JVM可能根本不会调用垃圾收集。毕竟,JVM在完成程序运行后仍会停止运行。那么如果JVM不再需要那个内存,那么JVM在完成程序运行后会怎么做呢?
这意味着在这种情况下永远不会调用finalize
方法。
希望这有帮助!