2 回收无效对象的过程

当经可达性算法筛选出失效的对象之后,并不是立即清除,而是再给对象一次重生的机会

  • 判断是否覆盖finalize()

    • 未覆盖该或已调用过该方法,直接释放对象内存
    • 已覆盖该方法且还未被执行,则将finalize()扔到F-Queue队列中
  • 执行F-Queue中的finalize()
    虚拟机会以较低的优先级执行这些finalize(),不会确保所有的finalize()都会执行结束

如果finalize()中出现耗时操作,虚拟机就直接停止执行,将该对象清除

  • 对象重生或死亡

    • 如果在执行finalize()方法时,将this赋给了某一个引用,则该对象重生
    • 如果没有,那么就会被垃圾收集器清除

注意:强烈不建议使用finalize()进行任何操作!
如果需要释放资源,请用try-finally或者其他方式都能做得更好.
因为finalize(

收藏 打印