Java 为什么销毁对象后 finalize 方法不起作用?

Java Why don't finalize method work after destroying object?

我试着做一些例子来了解 finalize 方法是如何工作的。但我无法在控制台中获得预期的输出。为什么 obejct 被销毁后,finalize 方法在以下示例中不起作用?

package work2;


class Foo {
    protected void finalize() {
        System.out.println("Object Destroyed."); // not working. why ?
    }
}

public class part3 {
    public static void main(String[] args) {
        Foo bar = new Foo();
        bar = null; // destroying the object (Garbage Collection)

        System.out.println("finished");
    }
}

程序输出

finished

谢谢。

为什么 GC 没有发生

GC不保证在任何时候运行,垃圾不多,所以不需要运行那个时候

暗示

可以使用这个:

System.gc();

向 JVM 提示现在是 运行 GC 的好时机,但这并不能保证 GC 会 运行,而且通常不是一个好主意。

清理

如果你想在使用后清理一些东西try-with-resources更合适。