JVM5-GC收集器和参数

堆得回顾

大对象、栈分配、不在新生代。
s0、s1大小相同、对称,只能一个可用。

串行收集器

1)最古老,最稳定,效率高,可能产生较长的停顿。
只有一个线程回收,多核中性能不能得到发挥。
2)-XX:+UseSerialGC
新生代 老年代使用串行回收;新生代复制算法;老年代标记-压缩;
DefNew新生代、Tenured老年代、Perm永久代

ParNew收集器

-XX:+UseParNewGC 新生代执行并行收集
ParNew 新生代

Parallel收集器

1)类似于ParNew 新生代复制算法;老年代标记-压缩;
PSYoungGen年轻代/ParLOldGen老年代收集/PSPermGen

2)-XX:+UseParallelGC 使用Parallel收集器+老年代串行
-XX:+UseParallelOldGC 使用ParallelOldGC 使用Parallel收集器+并行老年代

3)-XX:MaxGCPauseMills 最大停顿时间,单位毫秒;GC尽力保证回收时间不超过设定值
-XX:GCTimeRation 0-100的取值范围;垃圾收集时间占总时间的比;默认99,即最大允许1%时间做GC ,比重大,GC时间长
这两个参数是矛盾的。因为停顿时间和吞吐量不可能同时调优。

CMS收集器 Concurrent Mark Sweep

与应用程序一起并发执行;老年代收集器;并发阶段吞吐量降低;
降低停顿、清理不彻、不能再空间快满时清理
-XX:CMSInitiatingOccupancyFraction 设置出发GC的阈值 ;
如果空间不够,就会引起concurrent mode failure,遇到此情况停止业务,采用串行收集器。
CMS-concurrent-sweep 收集显示文字
-XX:+UseConcMarkSweepGC
新生代用并行收集器,老年代使用CMS+串行收集器
-XX:+UseCMSCompactAtFullColleciont FullGC后,进行一次空间整理,整理过程是独占的,会引起停顿时间变长
-XX:CMSFullGCsBeforeCompaction 设置进行几次Full GC(CMS GC)后,进行一次碎片整理
-XX:ParallelCMSThreads 设定CMS的线程数量
-XX:+CMSClassUnloadingEnabled 允许对类元数据进行回收
工作流程:
(1)初始标记 根可以直接关联到的对象;速度快;需要停顿
(2)并发标记 主要标记过程,标记全部对象;主要步骤;
(3)重新标记 由于编发标记时,用户线程依然运行,因此正式清理前修正,需要停止其他线程
(4)并发清除 基于标记结果,直接清理对象
由于清理时并发的所以只能清除不能压缩