我需要知道什么时候https://docs.oracle.com/javase/10/docs/api/java/lang/Object.html#finalize()“rel=”noreferrer“>finalize()方法在JVM中调用。我创建了一个测试类,当通过重写finalize()方法调用它时,它会写入一个文件。它没有被执行。有人能告诉我它不执行的原因吗
当对象即将被垃圾回收时,将调用finalize方法。这可以在垃圾收集合格后的任何时间进行
请注意,对象完全可能永远不会被垃圾收集(因此永远不会调用finalize)。当对象永远不符合gc条件时(因为它在JVM的整个生命周期内都是可访问的),或者在对象符合gc条件到JVM停止运行之间没有垃圾收集实际运行时(这通常发生在简单的测试程序中),就会发生这种情况
有一些方法可以告诉JVM在尚未调用它的对象上运行finalize,但是使用它们也不是一个好主意(该方法的保证也不是很强)
如果您依靠finalize来正确操作应用程序,那么您就做错了finalize应该只用于清理(通常是非Java)资源。这正是因为JVM不能保证在任何对象上调用finalize