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/45315515/

相关文章:

java - JPA @NamedQuery 有两个表

java - Jstack 和没有足够的存储空间来处理这个命令

java - 该方法的速度更快吗?线程或 "oneline method"- Java

ruby - String(42) 在 Ruby 中有什么作用?

.net - 如何分析 .net 垃圾收集器?

java - 找到 JUNG 中的所有路径?

java - 检测阿拉伯语标记中的重复字符

c++ - 如何检查是否在运行时定义了 C++ 抽象方法

haskell - GHC 在哪里分配外部内存以及垃圾收集器如何处理它?

java - 选择垃圾收集器的性能指标