JVM:CMS垃圾收集器【思维导图】

在这里插入图片描述

CMS垃圾收集器

以获取最短回收停顿为目标,基于标记清除算法

运作过程

初始标记(STW)

  • GC Roots能直接关联到的对象及「年轻代」指向「老年代」的对象

    • 速度快:因为没有「向下追溯」(只标记一层)

并发标记

  • 从GC Roots向下「追溯」,标记所有可达的对象

  • 并发预处理

    • 针对老年代的对象:类cardtable

      • 扫描可能由于「并发标记」过程中导致老年代发生变化的对象,会再扫描一遍标记为dirty的卡页
    • 针对新生代

      • 遍历新生代判断在「并发标记」过程中有没有对象引用了老年代
      • 在这个过程中可能会触发一次 minor GC

重新标记(STW)

  • 扫描dirty card和年轻代,标记存活老年对象

并发清除

  • 回收不可达对象
  • 由于处于并发状态,用户线程在不断产生垃圾,但只能留到下次GC ,这些垃圾叫“浮动垃圾”

重置 CMS 算法相关的内部数据,为下一次 GC 循环做准备

缺点 不足(有相应参数设置)

需要预留空间

  • 并发状态要保证有充足的内存空间供用户使用

  • 预留空间不够用,报错(Concurrent Mode Failure)

    • 启动 Serial Old进行老年代的垃圾回收导致停顿的时间很长

内存碎片

  • 基于「标记清除算法」的收集器会产生内存碎片

    • 碎片太多,可能会导致内存空间不足触发full GC
    • 一般会在触发full GC这个过程对碎片进行整理
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值