人机工程学 (垃圾回收自学习优化策略)
人机工程学是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>最小和最大堆大小。
调优策略
堆大小增长或者缩小到支持所选吞吐量目标的大小。了解堆调优策略,如选择最大的堆大小,并选择最大暂停时间目标。
不要选择堆的最大值,除非你知道你需要比默认堆大小更大的堆。选择一个足以满足你的应用程序的吞吐量目标。
应用程序行为的改变可能导致堆增长或者收缩。例如,如果应用程序以更高的速率开始分配,那么堆将增长以保持相同的吞吐量。
如果堆大小增加到他的最大值,但是他的吞吐量目标还是没有满足,这说明最大的堆大小对于吞吐量目标来说太小了。将最大堆大小设置为近乎平台上的总物理内存,但不会导致应用程序的交换(应用程序将内存内容写入硬盘???)。再次执行应用程序,如果吞吐量目标仍未实现,则应用程序的吞吐量目标对于平台上的可用内存来说太高。
如果吞吐量的目标可以实现,但暂停太长,则选择最大暂停时间目标。选择最大暂停时间目标可能意味着吞吐量目标无法满足,因此选择适用于应用程序的折中值。
当垃圾收集器试图去满足相互竞争的目标时,堆的大小通常会振荡。即使应用程序达到稳定的状态,这种情况也是事实存在的。实现吞吐量目标(可能需要更大的堆)的压力与达到最大暂停时间目标(可能需要更小的堆)和最小占有率。
批注
部分专有名词翻译个人感觉不好,希望各位指正,提升翻译质量
原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: HotSpot虚拟机垃圾收集优化教程-人机工程学
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/60344.html