CMS收集器

CMS收集器

CMS(Concurrent Mark and Sweep 并发标记清除)

收集器分为:

  1. 初始标记:只标记 GC Roots 能直接关联到的对象

  2. 并发标记:进行 GC Roots Tracing 的过程

  3. 重新标记:修正并发标记期间,因程序运行导致标记发生变化的一部分对象

  4. 并发清除:并发回收垃圾对象

初始标记和重新标记都会发生 stw 现象。

Java中Stop-The-World机制简称STW,是在执行垃圾收集算法时,Java应用程序的其他所有线程都被挂起(除了垃圾收集帮助器之外)。Java中一种全局暂停现象,全局停顿,所有Java代码停止,native代码可以执行,但不能与JVM交互;这些现象多半是由于gc引起。

使用标记清除算法,多线程并发收集的垃圾收集器

最后的重置线程,指的是清空跟收集相关的数据并重置下一次收集做准备

优点:低停顿、并发执行

缺点:

  1. 并发执行,对CPU资源压力大
  2. 无法处理在处理过程中产生的垃圾,可能导致FullGC
  3. 采用的标记清除算法会导致大量的碎片,在分配大对象是可能触发FullGC

开启使用:

-XX:UseConcMarkSweepGC: 使用 ParNew + CMS + Serial Old 的收集器组合, Serial Old 将作为 CMS 出错的后备收集器

(CMS 如果没有出错,那么 Serial Old 是不会启动的)

-XX:CMSInitiatingOccupancyFraction: 设置CMS 收集器在老年代空间被使用多少后触发回收,默认80% (JDK 13)

–XX:MaxTenuringThreshold=n: 新生代到老年代的岁数,默认是 6

---- The end of this article ----