知识点回顾
CMS(并发标记清除)
CMS收集器(Concurrent Mark Sweep): 并发标记清除)是一种以获取最短回收停顿时间为目标的收集器。
适合应用在互联网或者B/S系统的服务器上,这类应用尤其重视服务器的响应速度,希望系统停顿时间最短。CMS非常适合堆内存大、CPU核数多的服务器端应用,也是G1出现之前大型应用的首选收集器。
Concurrent Mark Sweep 并发标记清除,并发收集低停顿,并发指的是与用户线程一起执行。
开启该收集器的JVM参数:-XX:+UseConcMarkSweepGC 开启该参数后会自动将-XX:+UseParNewGC打卡
开启参数后,使用ParNew(Young区用)+CMS(Old区用)+Serial Old的收集器组合,Serial Old将作为CMS出错的后备收集器。
CMS四个过程:
- 初识标记:只是标记一下GC Roots能直接关联的对象,速度快,仍然需要暂停所有的工作线程
- 并发标记和用户线程一起: 进行GC Roots跟踪的过程,和用户线程一起工作,不需要暂停工作线程。主要标记过程,标记全部对象。
- 重新标记: 为了修正在并发标记期间,因用户程序继续运行而导致标记产生变动的那一部分对象的标记记录,仍然需要暂停所有的工作线程。由于并发标记时,用户线程依然运行,因此正式清理前,再b做修正。
- 并发清除和用户线程一起:清除GC Roots不可达对象,和用户线程一起,不需要暂停工作线程。基于标记结果,直接清理对象。 由于耗时最长的并发标记和并发清除过程中,垃圾收集线程可以和用户线程一起并发工作,所以总体上看CMS收集器的内存回收和用户线程一起并发执行。
优点: 并发收集低停顿。
缺点: 并发执行,对CPU资源压力大, 采用的标记清除算法会导致大量碎片。