串行收集器(使用单线程进行垃圾回收):对新生代的回收使用复制算法,对老年代使用标记压缩算法
串行收集器 -XX:+UseSerialGC 新生代串行复制,老年代串行标记整理
并行回收器(使用多线程进行垃圾回收):
ParNew回收器 -XX:+UseParNewGC 新生代并行复制,老年代串行标记整理
Parallel回收器 -XX:+UseParallelGC 新生代并行复制,老年代串行标记整理(比ParNew回收器好)
Parallel回收器 -XX:+UseParallelOldGC 新生代并行复制,老年代并行标记整理
CMS回收器
CMS回收器 -XX:+UseConcMarkSweepGC 只适用于老年代,减少了应用程序的停顿时间,但停顿频率高
初始标记
标记从GC Root可以直接可达的对象;
并发标记(和应用程序线程一起)
主要标记过程,标记全部对象;
重新标记
由于并发标记时,用户线程依然运行,因此在正式清理前,再做依次重新标记,进行修正。
并发清除(和用户线程一起)
基于标记结果,直接清理对象。
G1回收器
G1回收器 -XX:+UseG1GC
1、因为划分了很多区块,回收时减小了内存碎片的产生;
2、G1适用于新生代和老年代,而CMS只适用于老年代
总结
如果你想要最小化地使用内存和并行开销,请选Serial GC;
如果你想要最大化应用程序的吞吐量,请选Parallel GC;
如果你想要最小化GC的中断或停顿时间,请选CMS GC
新生代收集器: Serial、 ParNeW、Parallel Scavenge
老年代收集器: Serial Old、 Parallel Old、 CMS
整堆收集器: G1
-XX:+UseSerialGC:在新生代和老年代使用串行收集器
-XX:+UseParNewGC:在新生代使用并行收集器
-XX:+UseParallelGC :新生代使用并行回收收集器,更加关注吞吐量
-XX:+UseParallelOldGC:老年代使用并行回收收集器
-XX:ParallelGCThreads:设置用于垃圾回收的线程数
-XX:+UseConcMarkSweepGC:新生代使用并行收集器,老年代使用CMS+串行收集器
-XX:ParallelCMSThreads:设定CMS的线程数量
-XX:+UseG1GC:启用G1垃圾回收器
JVM垃圾回收器(串行Serial,ParNew,Parallel,CMS,G1)
于 2020-08-21 17:28:44 首次发布