例外在finalize方法[复制](Exception in finalize method [du

2019-06-25 20:21发布

可能重复:
方法敲定和异常

垃圾收集器调用finalize()方法时,其目的在于将要从存储器释放。 当一个异常的升高,会发生什么finalize()方法?

将GC进行进一步和释放内存,或GC将停止该对象的过程吗?

Answer 1:

如果异常是在try-catch语句提出并正确捕获然后是,“GC将进一步进行”,因为它在经常方案一样。

但是,如果抛出的异常没有被处理,然后,根据JSL ,

如果未捕获的异常定稿过程中引发的异常被忽略,并且该对象的终结终止。

所以,在这种情况下,“GC将停止该对象的过程”,并在这种情况下,它可能是一些资源没有被正确地释放。

顺便说一句,终结有2个缺点:

  • 你不能肯定的是,finalize方法将永远被执行(从这个博客 )

    为什么上面,如果垃圾收集器总是会调用释放与对象关联的内存之前完成? 究其原因是因为垃圾收集器并不总是得到一个机会来清理对象的JVM终止之前。

  • 终结力物体被提升到旧空间(这需要更长的时间来收集),直到终结运行推迟GC,增加更多的开销到GC algotithm。 (CF Java性能优化2日,由杰克·希拉兹版)。



Answer 2:

“由finalize方法抛出的任何异常导致要停止该对象的最后确定,否则忽略。” http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Object.html#finalize()



文章来源: Exception in finalize method [duplicate]