CMS垃圾收集器是Java垃圾收集器重要的一种,而且Java面试经常问,下面我就重点来详解CMS垃圾收集器@mikechen
CMS垃圾收集器定义
CMS收集器,全称是Concurrent Mark Sweep,是Java虚拟机中的一种Java垃圾收集器,CMS垃圾收集器它主要用于收集老年代的垃圾。
CMS垃圾收集器优缺
CMS垃圾收集器优点
1.并发收集
CMS垃圾收集器采用了并发收集的方式,在垃圾回收的过程中不需要停止应用程序的运行,因此可以减少应用程序的停顿时间,提高应用程序的响应速度。
2.高吞吐量
CMS垃圾收集器在适当的情况下,能够提供很高的吞吐量,也就是说可以在短时间内回收大量的垃圾,使得应用程序的吞吐量得到提高。
CMS垃圾收集器缺点
1.内存碎片
CMS垃圾收集器采用的是标记-清除的方式进行垃圾回收,会产生内存碎片,需要额外的空间来进行维护,这可能会导致内存使用效率的下降。
2.CPU占用
在并发收集的过程中,CMS垃圾收集器需要消耗一定的CPU资源,这可能会对应用程序的性能产生影响。
CMS垃圾收集器原理
CMS垃圾收集器它主要用于收集老年代的垃圾,主要采用的标记清除垃圾算法。
主要包含四个阶段:初始标记、并发标记、重新标记和并发清除,如下图所示:
1.初始标记
单线程执行,标记出GC Roots能直接关联到的对象,速度较快。
2.并发标记
并发执行,用户线程正常运行,垃圾收集线程进行并发标记。
3.重新标记
由于并发标记阶段用户线程仍在执行,所以可能会产生垃圾,重新标记阶段就是将并发标记阶段发生变动了的对象标记进行修正。
4.并发清除
并发执行,该阶段直接清楚之前标记的垃圾,用户线程可继续执行。
CMS垃圾收集器适用
CMS垃圾收集器适用于需要快速响应用户请求,同时也需要高吞吐量的应用程序。
以上就是CMS垃圾收集器的详解,跟多垃圾收集器,请查看:Java垃圾收集器详解(7种Java垃圾收集器)
陈睿mikechen
10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。
关注「mikechen」公众号,获取更多技术干货!
后台回复【面试】即可获取《史上最全阿里Java面试题总结》,后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》