CMS垃圾收集器有哪些优点和缺点?
CMS(Concurrent Mark Sweep)垃圾收集器是一种以获取最短回收停顿时间为目标的收集器。它的主要特点是并发收集、低停顿。以下是 CMS 垃圾收集器的优缺点:
优点:
- 并发收集:CMS 收集器大部分工作(包括初始标记、重新标记和清除)都在用户线程运行的同时进行,因此减少了GC对应用程序的影响。
-
低停顿:由于大部分GC过程可以与用户线程并发执行,所以CMS收集器在回收过程中产生的停顿时间相对较短。
缺点:
-
CPU资源占用高:CMS收集器在并发阶段会占用一部分CPU资源来进行垃圾回收,因此可能会对用户线程的执行速度产生一定影响。
-
产生内存碎片:CMS收集器采用的是“标记-清除”算法,这种算法在进行垃圾回收后,可能会产生大量不连续的内存碎片,进而影响大对象的分配。
-
无法处理浮动垃圾:在并发清除阶段,因为用户线程的运行,可能会产生新的垃圾,这些垃圾被称为“浮动垃圾”,CMS无法在当前的垃圾收集周期处理这些浮动垃圾。