美文网首页
CMS垃圾收集器

CMS垃圾收集器

作者: EnigmaXXX | 来源:发表于2019-03-06 22:34 被阅读0次

CMS介绍

CMS全称Concurrent Mark Sweep,从名字可知是基于“标记——清除”算法实现。以获取最短回收停顿时间为目标;


CMS垃圾收集器.png

总的来说,由上图可知CMS垃圾回收有四个步骤:

  • 初始标记(Initial Mark)
    标记GC Roots能直接关联到的对象,速度很快。
  • 并发标记(concurrent mark)
    遍历初始标记阶段标记出来的存活对象,然后继续递归标记这些对象可达的对象
  • 重新标记(remark)
    修正由于并发标记期间因用户程序继续运作而导致标记产生变动的那一部分对象的标记记录
  • 并发清理(concurrent sweep)
    与用户线程一起运行,清理那些无效的对象。

其中初始标记和重新标记需要Stop The World,但时间很短。并发标记与并发清理需要时间较长,但是可以和用户线程并发执行。

CMS缺点:

  • 无法处理浮动垃圾而导致concurrent mode failure

浮动垃圾:由于CMS并发清理阶段,用户线程的运行会导致新的垃圾产生,但是这一部分垃圾出现在标记阶段之后,CMS无法在当次收集中处理,只能在下次GC中清理,这一部分垃圾就称为“浮动垃圾”。

所以说CMS需要在老年代预留部分空间供并发收集时的程序运作使用。那么问题来了,CMS什么时候开始工作呢?也就是说CMS在老年代在使用百分之多少的空间时激活呢。太小不行,使用内存空间会小,这样垃圾容易满,GC次数会变多。

在JDK1.6中,阈值为92%(通过-XX:CMSInitiatingOccupancyFraction=)设置,预留的8%空间如果无法满足程序需要,就会出现concurrent mode failure。

这时JVM就会启用Serial Old收集器重新进行单线程STOP The World垃圾收集。效率极具下降。

  • 基于“标记——清除”算法会产生内存碎片,进而导致promotion failure

这是一个剩余空间不够的问题,剩余空间不够不是说整体的空间不够分配某个对象,而是说连续的空间不够分配给某个对象。所以一旦内存碎片大多就可能发生剩余空间不够的问题。(-XX:UseCMSCompactAtFullCollection和-XX:CMSFullGCBeforeCompaction=0 配合使用可以设置每次进行Full GC都开启碎片整理,不过这两个默认就是开启的,实际不需要设置)

promotion failure:minor gc过程中,另一个survivor的剩余空间不足以容纳eden及当前在用survivor区间存活对象,只能将容纳不下的对象移到年老代(promotion),而此时年老代由于剩余空间不够,无法容纳更多对象,通常伴随full gc,因而导致的promotion failure

相关文章

  • Java 垃圾收集器

    1、CMS收集器 CMS收集器是老年代垃圾收集器,可以与Serial收集器、Parallel New收集器搭配使用...

  • CMS收集器

    理解CMS收集器 CMS收集器在新生代垃圾回收时,所有应用线程都会暂停 CMS收集器在老年代的垃圾处理上启动一个并...

  • JVM-GC(2)

    JVM-GC(2) 垃圾收集器 CMS收集器 CMS收集器是一种以获取最短回收停顿时间为目标的收集器。CMS收集器...

  • CMS垃圾收集器——重新标记的讨论

    《深入理解java虚拟机 第二版 JVM高级特性与最佳实践》里面提到CMS垃圾收集器。 CMS垃圾收集器的垃圾回收...

  • 2.JVM系列-CMS垃圾收集器

    目录 一.背景 二.CMS垃圾收集器特性 三.CMS执行步骤 四.CMS日志解释(JDK1.8): 五.CMS参数...

  • 四、常见垃圾收集器

    一、垃圾收集器组合图 二、垃圾收集器的发展史 单核时代 - 串行垃圾收集器 多核时代 - 小内存1)CMS是老年代...

  • 22-大厂面试题:Con-current Mode Failur

    上文我们已经介绍了CMS垃圾收集器的工作原理以及流程,本篇我们接着深入说明CMS垃圾收集器的缺点以及所导致的一些问...

  • java CMS垃圾回收日志

    文章目录一、CMS垃圾回收器介绍二、CMS JVM运行参数三、CMS收集器运行过程1、初始标记(CMS initi...

  • 1 垃圾收集器

    垃圾收集器 Serial、Serial Old、PawNew、CMS、Parallel Scavenge、Para...

  • CMS垃圾收集器

    Concurrent mark sweep(CMS)收集器是一种年老代垃圾收集器,其最主要目标是获取最短垃圾 回收...

网友评论

      本文标题:CMS垃圾收集器

      本文链接:https://www.haomeiwen.com/subject/rzkfpqtx.html