1.串行收集器:
最古老,最稳定
效率高
可能会产生较长的停顿
-XX:+
UseSerialGC
–
新生代、老年代使用串行回收
–
新生代复制算法
–
老年代标记
-
压缩
2.并行收集器-parNew:
–
-XX:+
UseParNewGC
•
新生代并行
•
老
年代串行
–
Serial
收集器新生代的并行版本
–
复制算法
–
多线程,需要多核支持
–
-
XX:ParallelGCThreads
限制线程数量
3.并行收集器-parallel
–
类似
ParNew
–
新生代复制算法
–
老
年代 标记
-
压缩
–
更加关注吞吐量
–
-XX:+
UseParallelGC
•
使用
Parallel
收集器
+
老年代串行
–
-XX:+
UseParallelOldGC
•
使用
Parallel
收集器
+
并行老年代
-
XX:MaxGCPauseMills
–
最大停顿时间,单位毫秒
–
GC
尽力保证回收时间不超过设定值
-
XX:GCTimeRatio
–
0-100
的取值范围
–
垃圾收集时间占总时间的比
–
默认
99
,即最大允许
1%
时间做
GC
这两个参数是矛盾的。因为停顿时间和吞吐量不可能同时调优
4.CMS收集器
–
Concurrent Mark Sweep
并发标记清除
–
标记
-
清除算法
–
与标记
-
压缩相比
–
并发阶段会降低吞吐量
–
老年代收集器(新生代使用
ParNew
)
–
-XX:+
UseConcMarkSweepGC
-XX:+
UseCMSCompactAtFullCollection
Full GC
后,进行一次
整理
–
整理过程是独占的,会引起停顿时间变
长
-XX:+
CMSFullGCsBeforeCompaction
–
设置进行几次
Full GC
后,进行一次碎片整理
-
XX:ParallelCMSThreads
–
设定
CMS
的线程
数量
总结:一些GC参数设置说明
-XX:+
UseSerialGC
:
在新生代和老年代使用串行收集
器
-
XX:SurvivorRatio
:
设置
eden
区大小和
survivior
区大小的
比例
-
XX:NewRatio
:
新生代和老年代的比
-
XX:+
UseParNewGC
:
在新生代使用并行
收集器
-XX:+
UseParallelGC
:新生代使用
并行回收收集器
-XX:+
UseParallelOldGC
:老年代使用并行回收收集
器
-
XX:ParallelGCThreads
:
设置用于垃圾回收的线程
数
-XX:+
UseConcMarkSweepGC
:
新生代使用并行收集器,老年代使用
CMS+
串行收集
器
-
XX:ParallelCMSThreads
:设定
CMS
的线程
数量
-
XX:CMSInitiatingOccupancyFraction
:设置
CMS
收集器在老年代空间被使用多少后
触发
-XX:+
UseCMSCompactAtFullCollection
:设置
CMS
收集器在完成垃圾收集后是否要进行一次内存碎片的
整理
-
XX:CMSFullGCsBeforeCompaction
:设定进行多少次
CMS
垃圾回收后,进行一次内存
压缩
-
XX:+
CMSClassUnloadingEnabled
:允许对类元数据进行
回收
-
XX:CMSInitiatingPermOccupancyFraction
:当永久区占用率达到这一百分比时,启动
CMS
回收
-
XX:UseCMSInitiatingOccupancyOnly
:表示只在到达阀值的时候,才进行
CMS
回收