HotSpot虚拟机垃圾收集优化教程-人机工程学

人机工程学 (垃圾回收自学习优化策略)

人机工程学是Java虚拟机和垃圾收集探索式(例如基于行为的探索式算法)提高应用程序性能的过程。
Java虚拟机为垃圾收集器,堆大小和运行时编译器配置提供基于平台的默认选择。这些选择满足不同类型应用程序的需求,并且需要较少的命令行调优。此外,基于行为调优动态优化堆的大小,以满足应用程序特定的性能要求。
本节将介绍这些默认的选择和基于行为的调优。在使用后续章节中更加详细的控制配置前,请使用这些默认配置。

_话题_

  • 垃圾收集器,堆和运行时编译器的默认选择
  • 基于行为的优化
  • 最大暂停时间目标
  • 吞吐量目标
  • 足迹(空间量)
  • 调优策略

垃圾收集器,堆和运行时编译器的默认选择

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

  • Garbage-First (G1)垃圾收集器
  • 垃圾回收线程的最大数量受堆大小和可用CPU资源的限制
  • 初始化堆大小占物理内存的1/64
  • 最大堆大小占物理内存的1/4
  • 分层编译器,同时使用C1和C2 (JIT)

基于行为的优化

Java HotSpot垃圾收集器可以被配置为优先满足两个目标之一:最大暂停时间和应用程序吞吐量。如果满足了优先目标,垃圾收集器会尝试最大努力满足另外一个目标。当然,这些目标并非总能实现:应用程序需要最少的堆大小来保存至少所有的活跃数据,而其他的配置可能会妨碍实现某些或者所有所需的目标。

最大暂停时间目标

吞吐量目标是根据收集垃圾所花费的时间来衡量的,而在垃圾收集之外所花费的时间是应用程序时间。目标由命令行选项 -XX:GCTimeRation=nnn 指定。垃圾收集时间和应用程序时间之比是1/(1+nnn)。例如-XX:GCTimeRation=19将垃圾收集时间设置为总时间的1/20或者5%。垃圾收集花费的时间是所有垃圾收集引发的暂停时间的总和。如果达不到吞吐量目标,那么垃圾收集器的一个可能操作是增加堆的大小,以便在两次垃圾收集暂停之间应用程序中花费的时间更长。

足迹(空间量???)

如果吞吐量和最大暂停时间目标已经达到,则垃圾收集器减少堆的大小,直到不能满足目标之一(总是吞吐量目标不能满足)。垃圾收集器可以使用的最小和最大堆大小分别使用-Xms=<nnn>和-Xmx=<mmm>最小和最大堆大小。

调优策略

堆大小增长或者缩小到支持所选吞吐量目标的大小。了解堆调优策略,如选择最大的堆大小,并选择最大暂停时间目标。
不要选择堆的最大值,除非你知道你需要比默认堆大小更大的堆。选择一个足以满足你的应用程序的吞吐量目标。
应用程序行为的改变可能导致堆增长或者收缩。例如,如果应用程序以更高的速率开始分配,那么堆将增长以保持相同的吞吐量。
如果堆大小增加到他的最大值,但是他的吞吐量目标还是没有满足,这说明最大的堆大小对于吞吐量目标来说太小了。将最大堆大小设置为近乎平台上的总物理内存,但不会导致应用程序的交换(应用程序将内存内容写入硬盘???)。再次执行应用程序,如果吞吐量目标仍未实现,则应用程序的吞吐量目标对于平台上的可用内存来说太高。
如果吞吐量的目标可以实现,但暂停太长,则选择最大暂停时间目标。选择最大暂停时间目标可能意味着吞吐量目标无法满足,因此选择适用于应用程序的折中值。
当垃圾收集器试图去满足相互竞争的目标时,堆的大小通常会振荡。即使应用程序达到稳定的状态,这种情况也是事实存在的。实现吞吐量目标(可能需要更大的堆)的压力与达到最大暂停时间目标(可能需要更小的堆)和最小占有率。

批注

部分专有名词翻译个人感觉不好,希望各位指正,提升翻译质量

FavoriteLoading添加本文到我的收藏
  • Trackback 关闭
  • 评论 (0)
  1. 暂无评论

您必须 登陆 后才能发表评论

return top