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

标签 java methods garbage-collection call finalize

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

最佳答案

当对象即将被垃圾回收时,将调用 finalize 方法。这可以是在它有资格进行垃圾收集之后的任何时间。

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

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

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

关于java - Java中的finalize()方法什么时候被调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40960816/

相关文章:

java - 如何在 OSGi 中的不同包中扩展测试类

java - 实体关系未正确填充

java - 在我的 FirebaseRecyclerAdapter 方法中,我看不到 populateviewholder 方法未实现

c# - 下面的代码会导致内存泄漏吗?

java - Hadoop 中的 Mapreduce 在使用超过 200MB 的文件时会超出 GC 开销限制

java - 如何在参数化构造函数中指定多个枚举?

arrays - All_else 方法 (Ruby)

iphone - 调用另一个类中的方法失败

java - 不明确的可变参数方法

garbage-collection - System.gc() 会触发什么样的 GC?