深入理解Java虚拟机(JVM) --- 垃圾收集算法(中)
2 回收无效对象的过程
当经可达性算法筛选出失效的对象之后,并不是立即清除,而是再给对象一次重生的机会
判断是否覆盖finalize()
-
- 未覆盖该或已调用过该方法,直接释放对象内存
- 已覆盖该方法且还未被执行,则将finalize()扔到F-Queue队列中
- 执行F-Queue中的finalize()
虚拟机会以较低的优先级执行这些finalize(),不会确保所有的finalize()都会执行结束
如果finalize()中出现耗时操作,虚拟机就直接停止执行,将该对象清除
对象重生或死亡
- 如果在执行finalize()方法时,将this赋给了某一个引用,则该对象重生
- 如果没有,那么就会被垃圾收集器清除
注意:强烈不建议使用finalize()进行任何操作!
如果需要释放资源,请用try-finally或者其他方式都能做得更好.
因为finalize(