CMS收集器
CMS(Concurrent Mark and Sweep 并发标记清除)
收集器分为:
初始标记:只标记 GC Roots 能直接关联到的对象
并发标记:进行 GC Roots Tracing 的过程
重新标记:修正并发标记期间,因程序运行导致标记发生变化的一部分对象
并发清除:并发回收垃圾对象
初始标记和重新标记都会发生 stw 现象。
Java中Stop-The-World机制简称STW,是在执行垃圾收集算法时,Java应用程序的其他所有线程都被挂起(除了垃圾收集帮助器之外)。Java中一种全局暂停现象,全局停顿,所有Java代码停止,native代码可以执行,但不能与JVM交互;这些现象多半是由于gc引起。
使用标记清除算法,多线程并发收集的垃圾收集器
最后的重置线程,指的是清空跟收集相关的数据并重置下一次收集做准备
优点:低停顿、并发执行
缺点:
- 并发执行,对CPU资源压力大
- 无法处理在处理过程中产生的垃圾,可能导致FullGC
- 采用的标记清除算法会导致大量的碎片,在分配大对象是可能触发FullGC
开启使用:
-XX:UseConcMarkSweepGC: 使用 ParNew + CMS + Serial Old 的收集器组合, Serial Old 将作为 CMS 出错的后备收集器
(CMS 如果没有出错,那么 Serial Old 是不会启动的)
-XX:CMSInitiatingOccupancyFraction: 设置CMS 收集器在老年代空间被使用多少后触发回收,默认80% (JDK 13)
–XX:MaxTenuringThreshold=n: 新生代到老年代的岁数,默认是 6