赞
踩
CMS 是英文 Concurrent Mark-Sweep 的简称,是以牺牲吞吐量为代价来获得最短回收停顿时间的垃圾回收器。对于要求服务器响应速度的应用上,这种垃圾回收器非常适合。在启动 JVM 的参数加上“
-XX:+UseConcMarkSweepGC
”来指定使用 CMS 垃圾回收器。
CMS 使用的是标记-清除的算法实现的,所以在 gc 的时候回产生大量的内存碎片,当剩余内存不能满足程序运行要求时,系统将会出现 Concurrent Mode Failure,临时 CMS 会采用 Serial Old 回收器进行垃圾清除,此时的性能将会被降低。
JVM的CMS(Concurrent Mark and Sweep)垃圾回收器是一种以最小化应用程序停顿时间为目标的老年代垃圾回收器。以下是对CMS垃圾回收器的详细介绍:
工作原理:
初始标记(Initial Mark):在此阶段,CMS垃圾回收器会暂停应用程序,标记出与根对象直接关联的对象。这个过程是短暂的,停顿时间较短。
并发标记(Concurrent Mark):在此阶段,CMS垃圾回收器会与应用程序并发执行,标记出从根对象可达的所有存活对象。这个过程与应用程序的执行并行进行,目的是减少停顿时间。
重新标记(Remark):在此阶段,CMS垃圾回收器会暂停应用程序,对并发标记阶段中可能发生变化的对象进行重新标记。这个过程是短暂的,停顿时间较短。
并发清除(Concurrent Sweep):在此阶段,CMS垃圾回收器会与应用程序并发执行,清除所有未标记的对象,回收已标记的垃圾。这个过程与应用程序的执行并行进行,目的是减少停顿时间。
优点:
低停顿时间:CMS垃圾回收器通过并发标记和并发清除的方式,使得大部分的垃圾回收工作与应用程序的执行同时进行,从而减少了应用程序的停顿时间。
垃圾回收和应用程序并发执行:CMS垃圾回收器在并发标记和并发清除阶段与应用程序并发执行,尽量减少了垃圾回收对应用程序性能的影响。
老年代回收效率高:CMS垃圾回收器主要针对老年代进行回收,对于存活时间较长的对象能够高效地进行回收。
缺点:
CPU资源抢占:由于CMS垃圾回收器与应用程序并发执行,会占用一部分CPU资源,可能会导致应用程序的吞吐量略微降低。
无法处理浮动垃圾:由于并发清除阶段与应用程序并发执行,所以在回收过程中会产生一些新的垃圾对象。这些新生成的垃圾对象可能无法被及时回收,导致堆内存空间的浪费。
内存碎片问题:CMS垃圾回收器采用标记-清除算法,会产生内存碎片。如果内存碎片过多,可能会导致无法找到连续的内存空间来分配大对象,从而触发Full GC。
需要注意的是,CMS垃圾回收器在Java 9中已经被标记为过时(deprecated),并在Java 14中被移除。这是因为CMS垃圾回收器在处理大堆内存和长时间运行的应用程序时存在一些缺陷。建议在使用较新版本的JVM时,考虑使用更先进的垃圾回收器,如G1或ZGC。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。