原创

JAVA 垃圾回收器的特点

温馨提示:
本文最后更新于 2022年12月16日,已超过 873 天没有更新。若文章内的图片失效(无法正常加载),请留言反馈或直接联系我

JAVA 垃圾回收器的特点

Serial收集器:串行收集器是最古老,最稳定以及效率高的收集器,可能会产生较长的停顿,只使用一个线程去回收。
ParNew收集器:ParNew收集器其实就是Serial收集器的多线程版本。
Parallel收集器:Parallel Scavenge收集器类似ParNew收集器,Parallel收集器更关注系统的吞吐量。
Parallel Old 收集器:Parallel Old是Parallel Scavenge收集器的老年代版本,使用多线程和“标记-整理”算法
CMS收集器:CMS(Concurrent Mark Sweep)高并发执行,收集器是一种以获取最短回收停顿时间为目标的收集器。

缺点:CMS收集器对CPU资源非常敏感,CMS默认启动对回收线程数(CPU数量+3)/4, 当CPU数量在4个以上时,并发回收时垃圾收集线程不少于25%,并随着CPU数量的增加而下降,但当CPU数量不足4个时,对用户影响较大。

适用场景:重视服务器响应速度,要求系统停顿时间最短。可以使用参数- XX:+UserConMarkSweepGC来选择CMS作为老年代回收器。

G1收集器:G1 (Garbage-First)是一款面向服务器的垃圾收集器,主要针对配备多颗处理器及大容量内存的机器. 以极高概率满足GC停顿时间要求的同时,还具备高吞吐量性能特征。

其他收集器原本需要停顿Java线程执行的GC动作,G1收集器仍然可以通过并发的方式让java程序继续执行,是可预测的停顿。

G1运作步骤:1、初始标记;2、并发标记;3、最终标记;4、筛选回收

CMS收集器和G1收集器区别

CMS主要步骤: 并发标记清除。 主要步骤是 初始收集-并发标记-重新标记-并发清除-重置
G1 主要步骤: 初始标记-并发标记-重新标记-复制清除

CMS的缺点:对CPU的要求比较高。
G1的缺点:
将内存化成了多块,所以对内存段的大小有很大的要求。

CMS是清除,所以会有很多的内存碎片。
G1是整理,所以碎片空间较小

G1和CMS都是响应优先,他们的目的都是尽量控制 stop the world 的时间。
G1和CMS的Full GC都是单线程 mark sweep compact算法,直到JDK10才优化成并行的。

正文到此结束