java HotSpot虚拟机垃圾回收优化(二、Ergonomics)

来源:互联网 发布:家居网络推广招聘 编辑:程序博客网 时间:2024/04/28 12:04

Ergonomics是JVM和垃圾收集器调整的过程,如基本行为调整,提高应用性能。JVM提供平台相关的默认垃圾收集器,堆空间,运行时编译器选项。这些选
项与不同类型和应用程序的需求相匹配,同时需要较少的命令调整。另外,基本行为的调整动态改变堆大小来满足一些应用的特殊需求。

基本行为调整
对于并行垃圾收集器,java SE提供两种基于达成指定应用程序目标(最大暂停时间目标和应用吞吐量目标)的垃圾收集参数(此两参数对其他垃圾收集器
无效)。注:这些调整并不一定有效。应用需要足够大的堆空间存放应用数据。另外,最小堆内存的设置可能阻止此种调整。

Maximum Pause Time Goal
暂停时间是指垃圾收收集器停止应用程序和恢复不再使用空间的时间。设置Maximum Pause Time Goal的意图是限制这些停顿的最大时间。停顿的平均
时间与平均时间变化由垃圾收集器维护,如果暂停的平均时间与平均时间变化的值的和大于设置的最大暂停时间,那么垃圾收集器会以为此目标不能
满足。

Maximum Pause Time Goal由命令行选项 -XX:MaxGCPauseMillis= 指定,这可以解释为暗示垃圾收集器 毫秒或者更少停顿时间是理想的。
垃圾收集器会调整java 堆大小和其他一些垃圾收集的参数以确保达到暂停时间少于毫秒的目的。默认情况下没有设置最大暂停时间参数。这种
调整可以引起垃圾回收发生的更加频繁,降低应用程序的总吞吐量。垃圾收集器会尽量在满足Throughput Goal之前满足Maximum Pause Time Goal,
在一些场合,尽管Maximum Pause Time Goal不会被满足。

Throughput Goal
Throughput Goal是以就垃圾收集器花费的时间和应用程序运行的时间而言衡量的。此目标通过命令行参数 -XX:GCTimeRatio=指定。此时垃圾收
集时间与应用时间的比应为1/(1+),例如:-XX:GCTimeRatio=19,表示设置一个垃圾收集时间占总时间1/20或者5%比重的目标。

垃圾收集时间是新生代与老年代垃圾收集时间的总和。如果Throughput Goal不被满足,堆中代的空间将会增加以增加程序可以运行的时间。

Footprint Goal
如果Maximum Pause Time Goal和Throughput Goal都被满足,然后垃圾收集器就会减少堆空间大小直到两个目标中一个(永远都是throughput goal)
不被满足。然后不满足的目标将会被重新注册。

调整策略
不要为堆空间选择最大值,除非你知道你需要比默认堆内存更大空间的堆空间。选择throughput goal应该足够你的程序所使用。

堆空间会增加或者收缩到选择throughput goal支持的大小。程序行为的改变也会引起堆空间的增加或者收缩。如如果应用程序开始以更高的速率分配,
堆将增长以保持相同的吞吐量。

如果堆空间大小增长至设置的最大堆内存,但是throughput goal目标没有被满足,那么就是设置的最大堆空间设置的太小了。将最大堆空间值设置为
接近该平台总的物理内存但不引起程序的交换的值,如果throughput goal仍没被满足,那么此目标的应用程序时间比重对于该平台的可用内存来说
设置的高了。

如果throughput goal不被满足,并且垃圾收集时间太长,这时候,设置Maximum Pause Time Goal(设置一个最大暂停时间),设置Maximum Pause
Time Goal可能意思着不能满足throughput goal,所以设置最大暂停时间是对应用程序的一种可以接受的折中方法。

典型的就是当垃圾收集器在满足相互矛盾的目标时造成堆内存振荡,即使程序已经达到一个稳定状态。完成throughput goal目标(可能需要较大堆内存
)的需要与都可能需要较小堆内存的Maximum Pause Time Goal和Footprint Goal竞争。

0 0