JVM的CMS(Concurrent Mark Sweep)是一种垃圾回收器,属于Java HotSpot VM的一部分。CMS是一种以低延迟为目标的垃圾回收算法,它采用了“标记-清除”(Mark and Sweep)算法,以最小化垃圾回收对应用程序的影响。
CMS的特点是并发收集,即它可以在应用程序运行的同时执行垃圾回收操作,以最大程度地减少垃圾回收对应用程序的影响。此外,CMS还可以处理大型堆内存,因为它不需要将整个堆内存都标记为垃圾,而是只对部分内存进行标记和清除,以减少垃圾回收的时间和资源占用。
CMS的工作过程如下:
-
初始标记阶段:CMS会停止应用程序的所有线程,暂停程序的执行,对已经死亡的对象进行标记。此过程与“标记-清除”算法相似,但只是对已经死亡的对象进行标记。
-
并发标记阶段:CMS会启动与应用程序并发运行的垃圾回收线程,对未标记的对象进行标记。此阶段可以与应用程序同时运行,以减少对应用程序的影响。
-
重新标记阶段:CMS会暂停应用程序的所有线程,重新标记在并发标记阶段中被修改的对象。
-
并发清除阶段:CMS会启动与应用程序并发运行的垃圾回收线程,清除已经死亡的对象。