CMS
CMS(Concurrent Mark-Sweep)是一种用于垃圾回收的算法,主要用于减少应用程序停顿时间。在 Java 虚拟机中,CMS 回收过程包括以下几个阶段:
-
初始标记阶段(Initial Mark):在这个阶段,GC 线程会暂停所有应用线程,然后标记所有的根对象和直接与根对象关联的对象。这个阶段的目的是标记出所有从根对象直接可达的对象,以便后续的并发标记。
-
并发标记阶段(Concurrent Mark):在初始标记阶段完成后,GC 线程会与应用程序线程并发执行,标记所有从根对象间接可达的对象。这个阶段的特点是与应用程序线程并发执行,尽量减少停顿时间。
-
重新标记阶段(Remark):在并发标记阶段完成后,GC 线程需要再次暂停应用程序线程,重新标记所有在并发标记阶段有变动的对象,并发标记阶段结束之后产生的新对象。这个阶段的目的是修正并发标记阶段中因应用线程并发执行而导致的标记变动。
-
并发清除阶段(Concurrent Sweep):在重新标记阶段完成后,GC 线程与应用程序线程并发执行,清理未标记的对象,释放它们所占用的内存空间。这个阶段与应用程序线程并发执行,不会引起停顿。
总体来说,CMS 回收过程通过并发标记和并发清除的方式来减少垃圾回收时的停顿时间,但在进行垃圾回收的同时,可能会产生内存碎片问题,需要额外的处理