Kum*_*mar 7 java garbage-collection
可能重复:
方法finalize和exception
垃圾收集器finalize()在对象即将从内存中释放时调用方法.在finalize()方法中引发异常时会发生什么?
GC会继续进行并释放内存,否则GC将暂停该对象的进程?
如果在try-catch语句中引发异常并且正确捕获然后是,则"GC将继续进行",就像在常规程序中一样.
但是根据JSL的说法,如果没有处理抛出的异常,
如果在完成期间抛出未捕获的异常,则忽略该异常并终止该对象的终止.
因此,在这种情况下,"GC将暂停该对象的进程",在这种情况下,可能是某些资源未正确释放.
顺便说一下,终结器有两个缺点:
您无法确定是否会执行finalize方法(来自此博客)
为什么上面的垃圾收集器总是在释放与对象关联的内存之前调用finalize?原因是因为垃圾收集器在JVM终止之前并不总是有机会清理对象.
终结器强制将对象提升到旧空间(需要更长时间才能收集),并推迟GC直到终结器运行,从而为GC算法增加了更多开销.(参见Jack Shirazi的Java性能调优第二版).
| 归档时间: |
|
| 查看次数: |
7988 次 |
| 最近记录: |