垃圾收集器

垃圾收集器关系图

在这里插入图片描述

各种垃圾回收器和垃圾回收算法间的关系如下

  • Serial:标记-复制
  • Serial Old:标记-压缩
  • ParNew:标记-复制
  • Parallel Scavenge:标记-复制
  • Parallel Old:标记-压缩
  • CMS(Concurrent-Mark-Sweep):(并发)标记-清除
  • G1(Garbage-First):并发标记 + 并行复制
  • ZGC/C4:并发标记 + 并发复制
  • Shenandoah GC:并发标记 + 并发复制

CMS收集器

描述:

CMS:是追求最短回收停顿时间的收集器

收集过程:

  • 初始标记(initial mark):主要是标记一下GC Roots对象和被新生代引用的对象,速度非常快,这个过程需要STW
  • 并发标记 (concurrent mark) :主要是GC Roots对象遍历整个对象图的过程,这个过程耗时比较长,-可以并发进行
  • 重新标记 (remark) :主要是为了修正并发标记期间,因用户程序继续进行而使标记产生变动的一部分对象
  • 并发清除 (concurrent sweep):并发清理对象(会产生浮动垃圾)

收集日志:

在这里插入图片描述

缺点:

  • CMS收集器对处理器资源非常敏感,会占用一部分线程,而导致应用程序变慢,降低吞吐量
  • 会产生浮动垃圾(在并发清理阶段产生的),有可能会出现“Concurrent Mode Failure”失败进而导致另一次完全STW的FullGC。为了防止出现失败的情况,需要预留一部分空间,默认情况下是当老年代使用了68%空间就触发,当老年代增长慢的情况下,可以适当提高这个比例。
  • CMS是一款标记-清除算法实现的收集器,所以收集完之后内存会出现很多空间碎片,这样会使得明明有很多空间,但是没有足够大的空间分配给当前对象,而导致FullGC

G1垃圾收集器

描述:

Garbage First收集器,它开创了收集器面向局部收集的设计思路和基于Region的内存布局形式。

收集过程:

  • 初始标记:仅仅只是标记一下GC Roots能直接关联到的对象,并且修改TAMS指针的值,让下一阶段用户线程并发运行时,能准确地在可用的Region中分配新对象。
  • 并发标记:主要是GC Roots对象遍历整个对象图的过程,这个过程耗时比较长,可以并发进行
  • 最终标记:对用户线程做另一个短暂的暂停,用于处理并发阶段结束后仍遗留下来的最后那少量的SATB记录。
  • 筛选回收:负责更新Region的统计数据,对各个Region的回收价值和成本进行排序,根据用户所期望的停顿时间来制定回收计划,可以自由选择任意多个Region构成回收集,然后把决定回收的那一部分存活对象复制到Region,这里是需要暂停用户线程的。

优点:

  • 可以指定最大停顿时间
  • 分Region的内存布局
  • 按收益动态的确认回收集
  • 采用标记复制
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值