3.6低延迟垃圾收集器

3.6低延迟垃圾收集器

衡量垃圾收集器的三项最重要的指标:内存占用、吞吐量、延迟

1、Shenandoah收集器

Shenandoah使用和和G1一样的基于Region的堆内存布局,也存在有用于存放大对象的Humongous Region,默认的回收策略同样是优先处理回收价值最大的Region。

但与G1不同的是:

①支持并发的整理算法

②默认不支持分代收集

③摒弃了G1收集器中耗费大量内存和、计算资源的记忆集,改用名为“记忆矩阵”的全局数据结构进行跨Region引用的记录。降低了处理跨代引用指针的记忆集维护消耗,降低了伪共享问题的发生概率。

步骤:

-初始标记:与G1一样标记那些直接与GCroot关联的对象(Stop The World)


        -并发标记:与G1一样,遍历对象图,将可达的对象进行标记


        -最终标记:与G1一样,处理剩余的SATB扫描,并在这个阶段统计出回收价值最高的Region,将这些Region一起组成回收集合(Stop The World)

-并发清理:这个阶段用于清理那些整个区连一个存活对象都没有的Region

-并发回收:并发回收阶段是Shenandoah与之前的Gc的核心的差异,

在这个阶段,Shenandoah要把Region中还存活的对象复制一份代空的Region中去,复制对象这件事如果将用户线程冻结起来是非常简单的,但如果要让两者并发进行的话,就变得复杂起来了。其难点就是再对象复制的同时,用户线程任然可能不停对被移动的对象进行读写访问,移动对象是一次性的行为,但移动之后整个内存中所指向该对象的引用地址还是就对象的地址,不可能一瞬间改变,对于这些难题Shenandoah将会通过读屏障和被称为“Brooks Pointer”的转发指针来解决

-初始引用更新:并发回收之后还需要把堆中所有指向就对象的引用修正到复制后的新地址当中,这个操作称为引用更新(Stop The World)

-并发引用更新:真正开始进行引用更新操作,与用户线程一起并发执行

-最终引用更新:修正存在与GCroot中的引用(Stop The World)

-并发清理:经过并发回收和引用更新后整个Region中已经不存在还存活的对象,最后在调用一次并发清理阶段来回收这些内存空间

2、ZGC

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值