CMS垃圾收集器
2017-10-23 21:30
197 查看
CMS收集器
特点:
1.以获取最短回收停顿时间为目标
2.CMS全称是 Concurrent Mark Sweep。从名字就可以看出来两个特点,一是并发,这里并发并不是指多条GC进程一起工作,而是指GC进程可以与用户进程一起工作。二是,该垃圾收集器使用标记清除算法的方式回收垃圾。
收集过程:
1.初始标记:这个过程需要Stop the world,初始化标记仅仅只是标记一下GC Roots能直接关联到的对象。时间短。
2.并发标记:就是进行GC Roots Tracing的过程。这个过程中,用户进程与GC进程一起工作,所以对象引用关系在这个过程后可能会发生变化。时间长。
3.重新标记:这个过程需要Stop the World,修正并发标记期间因用户程序继续运行导致标记产生变动的那一部分对象的标记记录。时间比初始标记阶段长,比并发标记阶段短。
4.并发清除:这个过程中,用户进程与GC进程一起工作,GC清理垃圾。
总体上来看:时间最长的两个过程并发标记与并发清除过程中GC进程与用户进程并发,所以认为CMS是一款并发的垃圾收集器。
缺点:
1.CMS对CPU资源敏感,因为GC进程和用户进程一起跑的,所以用户进程不会停顿,但总吞吐量会变低。如果CPU数量多还好,如果CPU很少的话,用户程序的执行速度很变慢。
2.CMS无法处理浮动垃圾,因为并发清除这个阶段没有Stop the world。这个阶段中可能会有新的垃圾产生,但是这些垃圾没有被标记不会被清理。只能等待下次GC的时候再清理了。也是由于在垃圾收集阶段用户线程还需要运行,那也就还需要预留足够的内存空间给用户线程使用。CMS不能像其他收集器等到老年代几乎完全填满了再进行收集,需要预留一部分空间提供给并发收集时的运作使用。如果运行间预留的内存不够,那CMS就失败了,虚拟机将启动后备预案:启用Serial
Old收集器来进行老年代的垃圾收集。
3.因为CMS是基于标记清除算法的,所以会有很多空间碎片。所以会给大对象的分配带来很大问题,哪怕老年代有很大空间剩余,但是连续空余的空间很小也要FULL GC。CMS提供了UseCMSCompactAtFullCollection参数来在合适的时候合并整理内存碎片。但是内存整理的过程是无法并发的,停顿时间会变长。
特点:
1.以获取最短回收停顿时间为目标
2.CMS全称是 Concurrent Mark Sweep。从名字就可以看出来两个特点,一是并发,这里并发并不是指多条GC进程一起工作,而是指GC进程可以与用户进程一起工作。二是,该垃圾收集器使用标记清除算法的方式回收垃圾。
收集过程:
1.初始标记:这个过程需要Stop the world,初始化标记仅仅只是标记一下GC Roots能直接关联到的对象。时间短。
2.并发标记:就是进行GC Roots Tracing的过程。这个过程中,用户进程与GC进程一起工作,所以对象引用关系在这个过程后可能会发生变化。时间长。
3.重新标记:这个过程需要Stop the World,修正并发标记期间因用户程序继续运行导致标记产生变动的那一部分对象的标记记录。时间比初始标记阶段长,比并发标记阶段短。
4.并发清除:这个过程中,用户进程与GC进程一起工作,GC清理垃圾。
总体上来看:时间最长的两个过程并发标记与并发清除过程中GC进程与用户进程并发,所以认为CMS是一款并发的垃圾收集器。
缺点:
1.CMS对CPU资源敏感,因为GC进程和用户进程一起跑的,所以用户进程不会停顿,但总吞吐量会变低。如果CPU数量多还好,如果CPU很少的话,用户程序的执行速度很变慢。
2.CMS无法处理浮动垃圾,因为并发清除这个阶段没有Stop the world。这个阶段中可能会有新的垃圾产生,但是这些垃圾没有被标记不会被清理。只能等待下次GC的时候再清理了。也是由于在垃圾收集阶段用户线程还需要运行,那也就还需要预留足够的内存空间给用户线程使用。CMS不能像其他收集器等到老年代几乎完全填满了再进行收集,需要预留一部分空间提供给并发收集时的运作使用。如果运行间预留的内存不够,那CMS就失败了,虚拟机将启动后备预案:启用Serial
Old收集器来进行老年代的垃圾收集。
3.因为CMS是基于标记清除算法的,所以会有很多空间碎片。所以会给大对象的分配带来很大问题,哪怕老年代有很大空间剩余,但是连续空余的空间很小也要FULL GC。CMS提供了UseCMSCompactAtFullCollection参数来在合适的时候合并整理内存碎片。但是内存整理的过程是无法并发的,停顿时间会变长。
相关文章推荐
- CMS垃圾收集器介绍
- [置顶] 简介JVM的CMS垃圾收集器
- GC算法 垃圾收集器(包括CMS收集)
- JAVA虚拟机之三:CMS垃圾收集器
- CMS垃圾收集器
- 垃圾收集器Serial 、Parallel、CMS、G1
- JVM垃圾收集器使用调查:CMS最受欢迎
- 浅谈CMS垃圾收集器与G1收集器
- JVM垃圾收集器使用调查:CMS最受欢迎
- 垃圾收集器Serial 、Parallel、CMS、G1
- CMS垃圾收集器介绍
- jvm垃圾回收算法(并发垃圾收集器(CMS)为什么没有采用标记整理-算法来实现,而是采用的标记-清除算法?)
- [转]使用CMS垃圾收集器产生的问题和解决方案
- JVM垃圾收集器使用调查:CMS最受欢迎
- JVM中垃圾收集器 serial、parNew、parallel Scavenge;serial old、parallel old、CMS、G1
- 并发垃圾收集器(CMS)为什么没有采用标记-整理算法来实现?
- CMS垃圾收集器
- CMS垃圾收集器介绍
- Hotspot CMS 垃圾收集器要退休了?
- 垃圾收集器Serial 、Parallel、CMS、G1