JVM存在有CMS(Concurrent Mark Sweep)垃圾收集器和G1(Garbage First)垃圾收集器,它们的优缺点对比如下:
一、CMS:
1.特点
1)以获取最短回收停顿时间为目标,适用于对响应性能有较高要求的服务器应用,如Web服务器等。
2)包含4个阶段:初始标记,并发标记,重新标记,并发清除。
初始标记和重新标记需要暂停应用,并发标记和并发清除可以与应用程序并发执行。
3)并发收集。
4)只能在老年代使用。
2.缺点
1)对 CPU 资源敏感、无法处理浮动垃圾、标记——清除算法可能会产生内存碎片。当内存碎片过多时,可能提前触发Full GC,影响性能。
2)牺牲一定的吞吐量。
二、G1
1.特点
1)专门针对拥有多核处理器和大内存的机器的收集器,旨在满足GC响应时间的延迟可控,并尽可能提高程序的吞吐量。
2)将堆划分为多个大小相等的独立区域 Region。
3)优点:并发收集、并行与并发、分代收集、空间整合、可预测停顿。
4)使用标记整理算法。包含4个运行步骤:
初始标记(Initial Marking)
并发标记(Concurrent Marking)
最终标记(Final Marking)
筛选回收(Live Data Counting and Evacuation)
5)整理内存,不会产生内存碎片。
6)停顿时间可控:G1可以根据用户设定的允许的收集停顿时间,优先处理回收价值收益最大的Region。
7)适用于多核、大内存环境,适合服务端应用。能在追求低延迟的同时保证高吞吐量。
8)在新生代和老年代都可使用。
2.缺点
1)有时G1的吞吐量可能不如其他收集器。
微风不燥,阳光正好,你就像风一样经过这里,愿你停留的片刻温暖舒心。
我是程序员小迷(致力于C、C++、Java、Kotlin、Android、Shell、JavaScript、TypeScript、Python等编程技术的技巧经验分享),若作品对您有帮助,请关注、分享、点赞、收藏、在看、喜欢,您的支持是我们为您提供帮助的最大动力。
欢迎关注。助您在编程路上越走越好!