java - Java 什么时候调用 finalize() 方法?

我需要知道 finalize()方法在 JVM 中调用。我创建了一个测试类,该类在通过覆盖调用 finalize() 方法时写入文件。它不被执行。谁能告诉我它没有执行的原因吗?

最佳答案

finalize 方法在对象即将被垃圾回收时调用。这可以在它符合垃圾收集条件后的任何时间。

请注意,一个对象完全有可能永远不会被垃圾收集(因此永远不会调用 finalize)。这可能发生在对象永远不符合 gc 条件(因为它在 JVM 的整个生命周期内都可以访问)或者在对象变得符合条件和 JVM 停止运行之间实际上没有运行垃圾收集时(这通常发生在简单的测试程序)。

有一些方法可以告诉 JVM 在尚未调用它的对象上运行 finalize,但使用它们也不是一个好主意(该方法的保证不是也很强大)。

如果您依靠 finalize 来正确运行您的应用程序,那么您做错了什么。 finalize 应该用于清理(通常是非 Java)资源。 完全正确,因为 JVM 不保证 finalize 会在任何对象上被调用。

https://stackoverflow.com/questions/2506488/

相关文章:

macos - Mac上JDK的路径是什么?

java - @RequestParam 和 @PathVariable

java - 如何在Java中为正则表达式转义文本

java - 如何在 Mac 上的 IntelliJ IDEA 中增加 IDE 内存限制?

java - 带有 JDBC : DBCP vs C3P0 的连接池选项

java - 如何解决 “failed to lazily initialize a collect

java - 如何使用 apt-get 在 Ubuntu 18.04/17.04/16.10/16.

java - 如何对整数除法的结果进行四舍五入?

java - Java中的接口(interface)命名

java - 为什么我可以在 Java 中抛出 null?