并发的可达性分析

Java虚拟机使用可达性分析算法判断对象是否可回收,通过GC Roots开始搜索引用链,若对象与GC Roots间无连接则可回收。并发标记时可能出现浮动垃圾和误标记问题,CMS和G1垃圾收集器分别采用增量更新和原始快照策略来解决这些问题。
摘要由CSDN通过智能技术生成

并发的可达性分析

jvm如何判断对象是否应该回收

  1. 引用计数算法
    在对象中添加一个引用计数器,每当一个地方引用它时,计数器就加一;当引用失效时,计数器值就减一;任何时刻计数器为零的对象就是不可能再被使用的。
    但是,引用计数法不能解决循环依赖问题。
    循环依赖
    Object 1和Object 2其实都可以被回收,但是它们之间还有相互引用,所以它们各自的计数器为1,则还是不会被回收。
    所以,Java虚拟机没有采用引用计数法。它采用的是可达性分析算法。
  2. 可达性分析算法
    可达性分析算法的思路就是通过一系列的“GC Roots”,也就是根对象作为起始节点集合,从根节点开始,根据引用关系向下搜索,搜索过程所走过的路径称为引用链,如果某个对象到GC Roots间没有任何引用链相连。
    用图论的话来说就是从GC Roots到这个对象不可达时,则证明此对象是不可能再被使用的。所以此对象就是可以被回收的对象。
    可达性分析

并发的可达性分析容易出现的问题

并发标记线程进行标记时,用户修改了某些对象引用导致对象引用图状结构发生变更,会带来以下两种问题:

  • 原本可回收对象标记为不可回收
    虽然是错
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值