在Java中,什么时候调用finalize()方法?

33 浏览
0 Comments

在Java中,什么时候调用finalize()方法?

我需要知道在JVM中什么时候调用finalize()方法。我创建了一个测试类来重写finalize()方法,以便在被调用时将信息写入文件。但它并没有执行。有人能告诉我原因吗?

admin 更改状态以发布 2023年5月21日
0
0 Comments

一般而言,最好不要依赖于finalize()来做任何清理工作等。

根据Javadoc(值得一读),当垃圾回收确定对象没有更多的引用时,它会被垃圾回收器调用。

在程序的生命周期中,如果对象始终可访问,则可能永远不会发生。

此外,垃圾回收器也不保证在任何特定时间运行。总的来说,我的意思是,在一般情况下,除非有特定需要,否则finalize()可能不是最好的方法。

0
0 Comments

当对象即将 get garbage collected(垃圾回收)时,会调用 finalize 方法。这可能发生在它已经变为可回收状态后的任何时间。\n\n请注意,一个对象可能永远不会被垃圾回收(因此 finalize 方法永远不会被调用)。这可能发生在对象从未变为可回收状态(因为它在 JVM 生命周期中始终可达),或者在对象变为可回收状态和 JVM 停止运行之间实际上没有进行垃圾回收(这经常在简单的测试程序中发生)。\n\n有办法告诉 JVM 对尚未调用它的对象运行 finalize,但是使用它们也不是一个好主意(该方法的保证也不是非常强)。\n\n如果您依赖于 finalize 来正确操作您的应用程序,那么您正在做一些错误的事情。 finalize 应该用于清理(通常是非 Java)资源。这正是因为 JVM 无法保证对任何对象都会调用 finalize

0