在finalize方法中的异常

Kum*_*mar 7 java garbage-collection

可能重复:
方法finalize和exception

垃圾收集器finalize()在对象即将从内存中释放时调用方法.在finalize()方法中引发异常时会发生什么?

GC会继续进行并释放内存,否则GC将暂停该对象的进程?

ala*_*inm 9

如果在try-catch语句中引发异常并且正确捕获然后是,则"GC将继续进行",就像在常规程序中一样.

但是根据JSL的说法,如果没有处理抛出的异常,

如果在完成期间抛出未捕获的异常,则忽略该异常并终止该对象的终止.

因此,在这种情况下,"GC将暂停该对象的进程",在这种情况下,可能是某些资源未正确释放.

顺便说一下,终结器有两个缺点:

  • 您无法确定是否会执行finalize方法(来自此博客)

    为什么上面的垃圾收集器总是在释放与对象关联的内存之前调用finalize?原因是因为垃圾收集器在JVM终止之前并不总是有机会清理对象.

  • 终结器强制将对象提升到旧空间(需要更长时间才能收集),并推迟GC直到终结器运行,从而为GC算法增加了更多开销.(参见Jack Shirazi的Java性能调优第二版).