22、JVM实战:垃圾收集器:ParallelScavenge

19.4–垃圾收集器–Parallel Scavenge


1、结构图

*

2、Parallel Scavenge(并行)收集器

2.1、特征

1、 新生代收集器;
2、 使用复制算法,并行的多线程收集器;
3、 控制的吞吐量;

1、 吞吐量=运行用户代码时间/(运行用户代码时间+垃圾收集时间);
4、 停顿时间越短就越适合需要与用户交互的程序,良好的响应速度能提升用户体验,而高吞吐量则可用高效率地利用CPU时间,尽快完成程序的运算任务,主要适合在后台运算而不需要太多交互的任务;
5、 ParallelScavenge要和ParallelOld一起使用;

2.2、参数

2.2.1、-XX:MaxGCPauseMillis:

1、 控制最大垃圾收集停顿时间(毫秒),收集器尽可能的保证每次垃圾收集耗费的时间不超过这个设定值;

1、 如果这个这个值设定的过小,那么ParallelScavenge收集器为了保证每次垃圾收集的时间不超过这个限定值,会导致垃圾收集的次数增加和增加年轻代的空间大小,垃圾收集的吞吐量也会随之下降;
2、 XX:MaxGCPauseMillis设置的越小,吞吐量则必然越小;

2.2.2、-XX:GCTimeRatio

1、 设置垃圾收集时间占系统运行时间的百分比(>0,<100);

1、 如果把值设置为19,即系统运行时间:GC收集时间=19:1,那么GC收集时间就占用了总时间的5%【1/(19+1)=5%】;
2、 默认值为99,即最大允许1%的垃圾收集时间;

2.2.3、-XX:+UseAdaptiveSizePolicy:

1、 自动设置新生代的大小、Eden与Survivor区的比例,晋升老年代对象年龄等细节参数;
2、 设置此选项后,虚拟机会根据当前系统的运行情况收集性能监控信息,动态调整这些参数以提供最合适的停顿时间或者最大的吞吐量,这种调节方式称为GC自适应的调节策略(GCErgonomics);
3、 只需要把基本的内存数据设置好(如-Xmx设置最大堆),然后使用MaxGVPauseMillis参数或GCTimeRation参数给虚拟机设立一个优化目标,JVM会自动调节其他优化参数.;
4、 自适应调节策略也是ParallelScavenge收集器与ParNew收集器的一个重要区别;
5、 使用并行收集器时,建议一直打开;
6、 对于面向外部的大流量、低延迟系统,不建议启用此参数,建议关闭该参数;

2.2、Parallel Scavenge/Parallel Old运行示意图

*