1、推荐的垃圾收集组合,排名分先后
(1)-XX:+UseParallelOldGC:使用Parallel Scavenge+Parallel Old(适用于注重吞吐量及CPU资源敏感的场合)
(2)-XX:+UseConcMarkSweepGC:使用ParNew+CMS+Serial Old组合收集器(适用于服务器响应速度要求高的场景)
(3)G1:如果上面两种选择能满足要求,就不要使用G1,G1能提供低停顿需求,但若追求吞吐量,G1则不能带来特别的好处。
2、垃圾收集器介绍
java虚拟机提供了不同种类的垃圾收集器,分别适用于不同的场景。下图是各类收集器的大致组合情况
收集器名称 | 适用区域 | 适应场景 | 优缺点 | 涉及jvm参数 |
---|---|---|---|---|
Serial | 新生代 | 1、Server环境不推荐使用 2、单线程、单CPU场景 3、Client模式 | 优点:单cpu下没有线程交互的开销 缺点:StopTheWorld带给用户不好的体验 | -XX:+UseSerialGC:Client模式默认开启,打开此开关后,jvm会使用Serial+Serial Old的收集器组合 SurvivorRatio、PretenureSizeThreshold、HandlePromotionFailure |
ParNew | 新生代 | 1、多线程收集器 2、唯一能与CMS配合工作的多线程收集器 | UseConcMarkSweepGC:使用ParNew+CMS+Serial Old组合收集器 UseParNewGC:强制使用ParNew+Serial Old组合收集器 | |
Parallel Scavenge | 新生代 | 1、吞吐量优先 2、多线程收集器 3、搭配Parallel Old使用,适用于注重吞吐量及CPU资源敏感的场合 | 1、可以实现吞吐量优先的垃圾收集机制
| 1、UseParallelGC:Server模式默认开启,使用Parallel Scavenge+Serial Old 2、UseParallelOldGC:使用Parallel Scavenge+Parallel Old(适用于注重吞吐量及CPU资源敏感的场合) 2、MaxGCPauseMillis,最大年轻代垃圾收集时间 3、GCTimeRatio,吞吐量大小 4、UseAdaptiveSizePolicy,动态调整Xmn、SurvivorRatio、PretenureSizeThreshold |
Serial Old | 老年代 | Client模式下使用 | ||
Parallel Old | 老年代 | 搭配Parallel Scavenge使用 | ||
CMS(并发低停顿收集器) | 老年代 | 1、服务器响应速度要求高 | 优点:最短回收停顿时间 缺点: (1)对CPU资源敏感 (2)可能出现concurrent mode failure而导致另一次full GC (3)大量空间碎片产生,无法容纳大对象而导致fullGC | |
G1 | 新生代/老年代 | 1、对停顿时间要求很低的场景 | 优点:不会有内存碎片、停顿时间可控 |