美文网首页
谈谈CMS垃圾收集器

谈谈CMS垃圾收集器

作者: lenny611 | 来源:发表于2019-08-24 13:56 被阅读0次

CMS是一种以获取最短回收停顿时间为目标的收集器
优点:
1.并发收集
2.低停顿
缺点
1.CMS收集器对CPU资源非常敏感
2.CMS收集器无法处理浮动垃圾
3.基于标记-清除算法,所以易产生空间碎片

CMS执行步骤:
1.初时标记(STW)
2.并发标记
3.重新标记(STW)
4.并发清除

初始标记:标记一下GCRoots能关联到的对象,速度很快。
并发标记:进行GCRoots Tracing的过程。
重新标记:为了修正并发标记期间因用户程序继续运作而导致标记产生变动的那一部分对象的标记记录,这个阶段的STW一般会比初时标记阶段的时间长,但比并发标记的时间短

工作示意图.png

由于整个过程中耗时最长的并发标记和并发清除过程收集器线程都可以与用户线程一起工作,所以总体上来说,CMS收集器的内存回收过程是与用户线程一起并发执行的。

CMS收集器对CPU资源非常敏感是指在并发阶段,它虽然不会导致用户线程停顿,但是会因为占用了一部分线程(或者说CPU资源)而导致应用程序变慢,总吞吐量会降低。

CMS收集器无法处理浮动垃圾(Floating Garbage),可能出现“Concurrent Mode Failure”失败而导致另--次FullGC的产生。由于CMS并发清理阶段用户线程还在运行着,伴随程序运行自然就还会有新的垃圾不断产生,这-部分垃圾出现在标记过程之后,CMS无法在当次收集中处理掉它们,只好留待下一次GC时再清理掉。这一部分垃圾就称为“浮动垃圾”。

CMS是基于标记-清除算法,所以会有大量空间碎片产生。空间碎片过多时,将会给大对象分配带来很大麻烦,往往会出现老年代还有很大空间剩余,但是无法找到足够大的连续空间来分配当前对象,不得不提前触发一次Full GC。

相关文章

  • 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垃圾收集器的垃圾回收...

  • 谈谈CMS垃圾收集器

    CMS是一种以获取最短回收停顿时间为目标的收集器优点:1.并发收集2.低停顿缺点1.CMS收集器对CPU资源非常敏...

  • 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垃圾收集器

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