G1 回收器和 CMS 区别

296 阅读1分钟

G1回收器: G1回收器在Java 8中继续使用分代收集的思想,将整个Java堆划分为多个区域,但不同于传统的新生代和老年代概念。 CMS回收器: CMS仍然主要关注老年代的垃圾回收,使用“标记-清除”算法。

G1回收器: G1的目标是在可控制的停顿时间内获得尽可能高的吞吐量。 CMS回收器: CMS旨在减小垃圾收集的停顿时间,特别是在并发标记和清除阶段。

G1回收器: G1回收器的停顿阶段相对较多,包括初始标记、并发标记、最终标记、筛选回收等。 CMS回收器: CMS包括初始标记、并发标记、重新标记和并发清除等阶段。

G1回收器: 具有整理能力,可以在执行混合收集时进行空间整理。 CMS回收器: 不执行空间整理,可能导致老年代的碎片问题。

适用场景: G1回收器: 适用于需要较低停顿时间和更可控制的垃圾收集行为的应用,特别是对于大堆内存和多核处理器的情况。 CMS回收器: 适用于中小型Java堆,并在注重降低垃圾收集停顿时间的场景中表现良好。