HotSpot 虚拟机垃圾收集器调优指南二

2 人体工程学

人机工程学是Java虚拟机(JVM)和垃圾回收启发式(如基于行为的启发式)改进应用程序性能的过程。
JVM为垃圾收集器、堆大小和运行时编译器提供了与平台相关的默认选择。这些选择可以匹配不同类型应用程序的需求,同时需要较少的命令行调优。此外,基于行为的调优会动态优化堆的大小,以满足应用程序的指定行为。

主题
  • 垃圾回收器,堆和运行时编译器的缺省选择
  • 基于行为的调优
    • 最大暂停时间目标
    • 吞吐量目标
    • Footprint
  • 调优策略

垃圾收集器、堆和运行时编译器的默认选择
这些是重要的垃圾收集器、堆大小和运行时编译器默认选择:

  • 在服务器类机器上使用垃圾优先(G1)收集器,否则使用串行收集器。
  • GC 线程的最大数量受堆大小和可用CPU资源的限制
  • 初始堆的大小为物理内存的1/64
  • 最大堆大小为物理内存的1/4
  • 分层编译器,使用C1和C2

**注意:**如果VM检测到两个以上的处理器,且堆大小大于或等于1792MB,则VM将机器视为服务器类。

基于行为调优
Java HotSpot VM 垃圾收集器可以配置为优先满足两个目标中的一个:最大暂停时间和应用程序吞吐量。 如果授权目标得到满足,收集器将尝试最大化其他目标。当然,这些目标并不总是能得到满足:应用程序需要一个最小的堆来保存至少所有活动数据,而其他配置可能会阻止实现部分或左右预期目标。

最大暂停时间目标

暂停时间是垃圾收集器停止应用程序并恢复不再使用的空间的持续时间。最大暂停时间目标的目的是限制这些暂停的最长时间。
由垃圾收集器维护平均暂停时间和该平均时间的方差。平均值是从执行开始计算的,但它经过了加权,因此最近的暂停占比更重。如果暂停时间的平均值加上方差大于最大暂停时间目标,那么垃圾收集器认为目标没有达到。
最大暂停时间目标通过命令行参数指定:XX:MaxGCPauseMillis=nnn 这被解释为对垃圾收集器的一个提示,即需要nnn毫秒或更少的暂停时间。垃圾收集器调整Java堆大小和其他与垃圾收集相关的参数,以使垃圾收集暂停时间小于nnn毫秒。最大暂停时间目标的默认值因收集器而不同。这些调整可能会导致垃圾收集发生得更频繁。从而降低应用程序的总体吞吐量。然而,在某些情况下,预期的暂停时间目标无法达到。

吞吐量目标

吞吐量目标是根据垃圾收集所花费的时间来衡量的,而在垃圾收集之外所花费的时间是应用程序时间。
此目标由命令行参数-XX:GCTimeRatio=nnn指定。
花费在垃圾收集上的时间是所有垃圾收集引起的暂停的总时间。如果吞吐量目标没有得到满足,那么垃圾收集器一个可能的操作是增加堆的大小,以便在应用程序中花费的收集暂停之间的时间可以更长。

如果吞吐量和最大暂停时间目标已经满足,那么垃圾收集器将减少堆的大小,直到其中一个目标(总是吞吐量的目标)不能满足为止。垃圾收集器可以使用的最小和最大堆大小分别使用-Xms=nnn和-Xmx=mmm来设置最小和最大堆大小

调优策略
堆增长或缩小到支持所选吞吐量目标的大小。了解堆调优策略,如选择最大堆大小和选择最大暂停时间目标。

不要为堆选择最大值,除非您知道需要一个大于默认的最大堆大小的堆。选择对您的应用程序足够的吞吐量目标。
应用程序行为的更改可能导致堆的增长或收缩。如果应用程序以更高的速率分配,那么堆将增长以保持相同的吞吐量。
如果堆增长到它的最大大小,而吞吐量目标没有达到,那么最大堆大小对于吞吐量目标来说太小了。将最大堆大小设置为接近平台上总物理内存的值,但不会导致应用程序交换。再次执行应用程序。如果吞吐量的目标仍然没有达到,那么应用程序时间的目标对于平台上的可用内存来说太高了。

如果吞吐量目标能够满足,但是暂停时间太长了,则选择最大暂停时间目标。
选择最大暂停时间目标可能意味着无法达到吞吐量目标,因此要选择对应用程序来说可以接受的折中值。

当垃圾收集器试图满足相互竞争的目标时,堆的大小通常会放生波动。即使应用程序已经达到稳定状态,这也是正确的。实现吞吐量目标(这可能需要更大的堆)的压力与最大暂停时间和最小占用空间(这两者都可能需要较小的堆)的目标相竞争。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值