博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java scavenge_Java虚拟机(JVM)垃圾回收器Parallel Scavenge收集器 - Break易站
阅读量:1540 次
发布时间:2019-04-21

本文共 2140 字,大约阅读时间需要 7 分钟。

Parallel Scavenge收集器

Parallel Scavenge垃圾收集器因为与吞吐量关系密切,也称为吞吐量收集器(Throughput Collector)。

1、特点

(A)、有一些特点与ParNew收集器相似

新生代收集器;

采用复制算法;

多线程收集;

(B)、主要特点是:它的关注点与其他收集器不同

CMS等收集器的关注点是尽可能地缩短垃圾收集时用户线程的停顿时间;

而Parallel Scavenge收集器的目标则是达一个可控制的吞吐量(Throughput);

关于吞吐量与收集器关注点说明详见本节后面;

2、应用场景

高吞吐量为目标,即减少垃圾收集时间,让用户代码获得更长的运行时间;

当应用程序运行在具有多个CPU上,对暂停时间没有特别高的要求时,即程序主要在后台进行计算,而不需要与用户进行太多交互;

例如,那些执行批量处理、订单处理、工资支付、科学计算的应用程序;

3、设置参数

Parallel Scavenge收集器提供两个参数用于精确控制吞吐量:

(A)、"-XX:MaxGCPauseMillis"

控制最大垃圾收集停顿时间,大于0的毫秒数;

MaxGCPauseMillis设置得稍小,停顿时间可能会缩短,但也可能会使得吞吐量下降;

因为可能导致垃圾收集发生得更频繁;

(B)、"-XX:GCTimeRatio"

设置垃圾收集时间占总时间的比率,0

GCTimeRatio相当于设置吞吐量大小;

垃圾收集执行时间占应用程序执行时间的比例的计算方法是:

1 / (1 + n)

例如,选项-XX:GCTimeRatio=19,设置了垃圾收集时间占总时间的5%--1/(1+19);

默认值是1%--1/(1+99),即n=99;

垃圾收集所花费的时间是年轻一代和老年代收集的总时间;

如果没有满足吞吐量目标,则增加代的内存大小以尽量增加用户程序运行的时间;

此外,还有一个值得关注的参数:

(C)、"-XX:+UseAdptiveSizePolicy"

开启这个参数后,就不用手工指定一些细节参数,如:

新生代的大小(-Xmn)、Eden与Survivor区的比例(-XX:SurvivorRation)、晋升老年代的对象年龄(-XX:PretenureSizeThreshold)等;

JVM会根据当前系统运行情况收集性能监控信息,动态调整这些参数,以提供最合适的停顿时间或最大的吞吐量,这种调节方式称为GC自适应的调节策略(GC Ergonomiscs);

这是一种值得推荐的方式:

(1)、只需设置好内存数据大小(如"-Xmx"设置最大堆);

(2)、然后使用"-XX:MaxGCPauseMillis"或"-XX:GCTimeRatio"给JVM设置一个优化目标;

(3)、那些具体细节参数的调节就由JVM自适应完成;

这也是Parallel Scavenge收集器与ParNew收集器一个重要区别;

更多目标调优和GC自适应的调节策略说明请参考:

《Memory Management in the Java HotSpot™ Virtual Machine》 5节 Ergonomics -- Automatic Selections and Behavior Tuning:http://www.oracle.com/technetwork/java/javase/tech/memorymanagement-whitepaper-1-150020.pdf

《Java Platform, Standard Edition HotSpot Virtual Machine Garbage Collection Tuning Guide》 第2节 Ergonomics:http://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/ergonomics.html#ergonomics

4、吞吐量与收集器关注点说明

(A)、吞吐量(Throughput)

CPU用于运行用户代码的时间与CPU总消耗时间的比值;

即吞吐量=运行用户代码时间/(运行用户代码时间+垃圾收集时间);

高吞吐量即减少垃圾收集时间,让用户代码获得更长的运行时间;

(B)、垃圾收集器期望的目标(关注点)

(1)、停顿时间

停顿时间越短就适合需要与用户交互的程序;

良好的响应速度能提升用户体验;

(2)、吞吐量

高吞吐量则可以高效率地利用CPU时间,尽快完成运算的任务;

主要适合在后台计算而不需要太多交互的任务;

(3)、覆盖区(Footprint)

在达到前面两个目标的情况下,尽量减少堆的内存空间;

可以获得更好的空间局部性;

更多Parallel Scavenge收集器的信息请参考:

官方的垃圾收集调优指南 第6节:http://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/parallel.html#parallel_collector

上面介绍的都是新生代收集器,接下来开始介绍老年代收集器;

转载地址:http://qrhdy.baihongyu.com/

你可能感兴趣的文章
大家一定注意流感!
查看>>
学习编程,最忌纠结!
查看>>
其实,我最爱网易系
查看>>
我面试必问的一个问题
查看>>
2 月送书啦!
查看>>
技术人,其实很有优势
查看>>
九大厂商联合推出「快应用」,围攻微信?
查看>>
事业和家庭本就不能两全
查看>>
一个新的里程碑
查看>>
程序员,成为北京人,只差月薪 7w 了。
查看>>
30 岁前的年轻人,一拨在迷茫,一拨在弯道超车
查看>>
3 月福利来啦!
查看>>
推荐两个非常不错的公众号
查看>>
我和一位快递小哥的故事
查看>>
厉害了,武汉理工大学!
查看>>
给跳槽的人 7 点建议
查看>>
给大家推荐两部电影
查看>>
给大学生的几点建议
查看>>
我还在,好好的。
查看>>
请远离这些精神毒品!!
查看>>