方法最终确定和例外

当GC从内存中回收一个对象时,GC忽略了exception,我不太清楚。

如果我有一个try/catch进入finalize方法,我看到它总是被执行…那么在哪些情况下不抛出exception?

谢谢。

finalize方法由终结器线程运行。 如果你抛出exception,终结器将忽略它(吞下它)。 否则,终结器线程将死亡。 这适用于抛出但未被代码捕获的exception(在finalize() )。 如果您发现exception,则照常营业。

这意味着将忽略从finalize方法抛出的任何exception。 但是,它内部的例外仍然像往常一样。

现有的两个答案似乎表明终结器将忽略任何未捕获的exception。 这似乎与此处的答案相矛盾: finalize方法中的exception似乎对JSL有正确的引用。 它表示未捕获的exception将中止相关对象的最终确定(可能泄漏资源),但终结器线程本身将继续完成其他对象。 这符合实证结果。