java混合回收_深入学习G1回收器和JVM:混合回收(6)

新一代垃圾回收器ZGC设计与实现70.31元(需用券)去购买 >混合回收可以总结为两个阶段:并发标记:目的是识别老生代分区中的活跃对象,并计算分区中的垃圾对象占空间的多少,用于垃圾回收过程中判断是否回收分区。垃圾回收:和新生代回收步骤一致,重用了新生代回收的代码,最大的不同就是回收的时候不仅仅回收新生代分区,同时回收并发标记中识别的垃圾多的老生代分区。并发标记算法详解并发标记算法是混合回收中...
摘要由CSDN通过智能技术生成

新一代垃圾回收器ZGC设计与实现

70.31元

(需用券)

去购买 >

16acbf7a698e473dda7c8d0d01805acd.png

混合回收可以总结为两个阶段:

并发标记:

目的是识别老生代分区中的活跃对象,并计算分区中的垃圾对象占空间的多少,用于垃圾回收过程中判断是否回收分区。

垃圾回收:

和新生代回收步骤一致,重用了新生代回收的代码,最大的不同就是回收的时候不仅仅回收新生代分区,同时回收并发标记中识别的垃圾多的老生代分区。

并发标记算法详解

并发标记算法是混合回收中最重要的算法。并发标记指的是标记线程和mutator线程并发运行。

并发标记算法设计了4个指针

Bottom:底部位置

Prev:指向上次并发处理后的地址

Next:指向并发标记开始之前内存已经分配成功的地址

Top:在并发标记开始后,如果有新的对象分配,可以移动top指针,使top指针指向当前内存分配成功的地址。

Next和Top之间就是Mutator线程新增的对象使用的地址。

假设Prev之前的对象已经标记成功,在并发标记的时候从根出发,不仅仅标记Prev和Next之间的对象,还标记Prev之前的活跃对象。当并发标记结束之后,只需将- Prev指针设置为Next指针即可开始新一轮的标记处理。

并发标记引入两个位图:

PrevBitMap:记录Prev指针之前的内存标记状况

NextBitMap:表示整个内存到next指针之前的标记状态

并发标记开始之前:

1460000021901705

TAMS指的是Top-at-Mark-Start,并发标记结束后,NextBitMap标记了分区对象的存活情况。假定位图中黑色区域表示堆分区中对应的对象还活着,在并发标记的同时Mutator继续运行,所以Top会继续增长。

第二次标记开始,将NextBitMap值赋给PrevBitMap,将Next指针位置设置为Prev,将Top指针位置设置为Next指针。

并发

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值