三、垃圾收集之判断对象是否存活

本文详细介绍了Java虚拟机中垃圾回收的两种主要算法:引用计数算法和可达性分析算法。其中,可达性分析算法是当前Java虚拟机采用的主要算法,并深入探讨了如何通过该算法确定对象是否可回收,以及在回收过程中如何处理finalize()方法。

一、引用计数算法

  1. 当有一个地方引用这个对象时,计数器加1
  2. 当引用失效时,计数器减1
  3. 当计数器为0时,则对象死亡,等待回收

二、 可达性分析算法

  1. 若一个对象无法通过引用链接到GC Roots时,则判定该对象为可回收对象(第一次标记)
  2. 目前java虚拟机采用的就是 可达性分析算法 判断对象是否可回收
  3. 对于虚拟机判定的可回收对象,还会再次进行标记是否有必要执行finalize()方法
    • 该类中没有覆盖finalize()方法,则没有必要执行finalize()方法
    • 虚拟机已经调用过一次finalize()方法,则没有必要执行finalize()方法
    • 除了上述两种情况,虚拟机都会为对象执行finalize()方法
  4. 若虚拟机判定对象可回收,则此时将对象放到F-Queue中等待执行finalize()方法
  5. 若在覆盖的finalize()方法中,将可回收对象赋值给其他变量,则这个对象在第二次标记时被移除出可回收集合

081753_a7aI_3001485.png

 

转载于:https://my.oschina.net/u/3001485/blog/796502

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值