2

嗨,我对幻影参考有一个疑问。我所理解的 finalize 方法是在对象进行垃圾收集之前调用的。但是有时如果对象不符合垃圾回收条件,则 finalize 方法将不会执行。

现在谈论这个 finalize 方法将被调用时的幻像引用。

总是在幻像引用中调用 finalize。

我对此很困惑。请帮我。

4

3 回答 3

5

终结器永远不能保证被调用,无论是否存在幻像引用。不要依赖终结器来处理代码的任何关键部分,因为无法保证它们会被及时调用或实际上根本不会被调用。

许多人主张你根本不应该使用终结器,因为它们很难正确使用。

于 2011-04-16T19:34:07.317 回答
1

当对象仅通过幻像引用变得可用时,在finalize()调用第一个 GC 方法之后,在第二个 GC 之后,引用被排队。如果在该幻像引用被清除(或本身变得不可用)之后,则在第三次 GC 后清除内存。

于 2011-10-14T06:05:47.733 回答
0

Finalize 总是会在你期望的时候被调用,但不是必须的。可能会发生调用只会在 JVM 关闭时进行(假设您不简单地杀死程序)。finalize()你不应该为了做重要的工作而依赖。但是实现一个有用的finalize()并包含一个调用super.finalize()也是一个好习惯。

于 2011-04-16T19:37:06.380 回答