jvm 垃圾收集器分析
新生代收集器 | 老年代收集器 | 优点 | 缺点 | |
serial收集器 | V |
1.jdk1.3开始的单线程收集器 2.client模式下很好的选择。 3.复制算法 |
1.单线程,收集时需要暂停所有线程(stop the world)
|
|
parNew收集器 | V |
1.serial的多线程版 2.server模式下 3.可与CMS收集器工作 4.线程数与cpu数相同 |
1.单CPU下不会比serial收集器性能好 | |
Parallel Scavenge 收集器 | V |
1.能达到期望的吞吐量 -XX:MaxGCPauseMilis 停顿时间,-XX:GCTimeRatio设置吞吐量大小。 -XX:UseAdaptiveSizePlicy:GC自适应调节策略。
|
1.停顿时间减少,gc频率就会加大。 | |
serial Old | V |
1.单线程和serial组合合用 2.client模式下 3.CMS的后备预案 4.标记整理算法 |
1.单线程 2.client模式下 |
|
parallel Old | V |
1.Parallel Scavenge 收集器老年版本 2.多线程“标记整理”算法 3.在吞吐量优先和CPU资源敏感的场合下都可以优先考虑用Parallel Scavenge+Parallel Old组合 |
||
CMS | V |
1.并行收集 2.低停顿 |
1.cpu敏感
2.无法处理浮动垃圾 3.标记-清除算法,会有空间碎片引起fullGc |
|
G1 | V | V |
1.并行与并发 2.分代收集 3.空间整合,整体是标记-整理,局部是得制算法。 4.可预测的停顿 |
|
高吞吐量可以高效率地利用CPU时间,尽快完成程序的运算任务,主要适合在后台运算而不需要太多交互的任务。
查看当前jvm 垃圾收集器
java -XX:+PrintFlagsFinal
可以看到1.8默认的是 UseParallelGC
ParallelGC 默认的是 Parallel Scavenge(新生代)+ Parallel Old(老年代)
在JVM中是+XX配置实现的搭配组合:
UseSerialGC 表示 “Serial” + "Serial Old"组合
UseParNewGC 表示 “ParNew” + “Serial Old”
UseConcMarkSweepGC 表示 “ParNew” + “CMS”. 组合,“CMS” 是针对旧生代使用最多的
UseParallelGC 表示 “Parallel Scavenge” + "Serial Old"组合
UseParallelOldGC 表示 “Parallel Scavenge” + "Parallel Old"组合
在实践中使用UseConcMarkSweepGC 表示 “ParNew” + “CMS” 的组合是经常使用的