一、垃圾收集器
1.串行收集器Serail: Serail、Serail Old
单个线程执行完垃圾收集,再用单个线程去执行应用程序。如嵌入式
2.并行收集器Parallel:Parallel Scavenge、Parallel Old 吞吐量优先
指多个线程并发执行垃圾收集,在垃圾收集期间,暂停应用程序执行,适用于交互性弱的场景,如科学计算,后台处理
3.并发收集器Concurrent:CMS、G1、响应时间优先
指垃圾收集和应用程序同时执行(不一定是并行,有可能是线程交替执行),适用于交互性强的场景。如web
二、停顿时间和吞吐量
1.停顿时间
垃圾收集过程中暂停应用程序的时间
-XX:MaxGCPauseMillis
2.吞吐量
花在垃圾收集的时间比上应用程序执行的时间
-XX:GCTimeRatio=n ,垃圾收集时间占1/(1+n)
这两个值是互斥的,往往停顿时间短,吞吐量n的值就会大,调优就是需要将这两个值调到一个适中的数。
三、参数
1.串行:-XX:+UseSerialGC 默认会开启老年代的串行:-XX:+UseSerialOldGC
2.并行:-XX:+UseParallelGC 默认会开启老年代的并行:-XX:+UseParallelOldGC
Server模式下默认开启的是并行收集(当内存大于2G,cpu2核以上时就默认开启Server模式)
3.并发
CMS:-XX:+UseConcMarkSweepGC 默认会开启新生代并发:-XX:+UseParallelNewGC
G1:-XX:+UseG1GC
四、垃圾收集器搭配
五、如何选择垃圾收集器
1.优先调整堆的大小让服务器自己来选择
2.如果内存小于100M,使用串行收集器
3.如果是单核,并且没有停顿时间的要求,使用串行或让jvm自己选择
4.如果停顿时间允许超过1秒,选择并行或者jvm自己选择
5.如果响应时间最重要,并且停顿时间不超过1秒,使用并发收集