如果在finalize()期间抛出异常会发生什么

发布于 2024-09-05 18:37:55 字数 148 浏览 6 评论 0原文

如果finalize()执行过程中抛出异常会发生什么? 堆栈展开是否像平常一样?它会继续finalize()并忽略异常吗?它会停止 Finalize() 并继续 GC 对象吗?或者其他什么?

我不是在寻找使用 Finalize() 的指南,有很多页面对此进行了解释。

What would happen if an exception is thrown during the execution of finalize()?
Is the stack unwind like normally? Does it continue finalize() and ignore the exception? Does it stop finalize() and continue GC the object? Or something else?

I'm not looking for guidelines of using finalize() there are plently of pages explaining that.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

星星的軌跡 2024-09-12 18:37:55

来自 Object#finalize() javadoc:

finalize 抛出的任何异常
方法导致此方法的完成
对象被停止,但否则
被忽略。

From the Object#finalize() javadoc:

Any exception thrown by the finalize
method causes the finalization of this
object to be halted, but is otherwise
ignored.

独守阴晴ぅ圆缺 2024-09-12 18:37:55

假设您有充分的理由编写终结器,则编写终结器的正确方法是:

protected void finalize() throws Throwable
{
  try
  {
    // my finalization code
  }
  finally
  {
    super.finalize();
  }
}

The correct way to code a finalizer, assuming you have a valid reason to write one at all, is this:

protected void finalize() throws Throwable
{
  try
  {
    // my finalization code
  }
  finally
  {
    super.finalize();
  }
}
书间行客 2024-09-12 18:37:55

如果抛出异常,那么finalize的调用将被终止,下次它不会被调用,但对象将从内存中被GC。

In case if exception would be thrown, then the invocation of finalize will be terminated, and next time it will not be invoked but object will be GC-ed from memory.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文