美文网首页
Ergonomics

Ergonomics

作者: taj3991 | 来源:发表于2019-12-05 19:25 被阅读0次

    Ergonomics是Java虚拟机(JVM)和垃圾收集调优(例如基于行为的调优)改善应用程序性能的过程。JVM为垃圾收集器,堆大小和运行时编译器提供了依赖于平台的默认选择。这些选择符合不同类型应用程序的需求,同时需要较少的命令行调整。此外,基于行为的调整会动态调整堆的大小,以满足应用程序的指定行为。

    本节描述了这些默认选择和基于行为的调整。在使用后续部分中介绍的更详细的控件之前,请首先使用这些默认值。

    Garbage Collector, Heap, and Runtime Compiler Default Selections

    称为服务器类机器的一类机器已定义为具有以下内容的机器:

    • 2个或更多物理处理器
    • 2 GB或更多的物理内存

    在服务器级计算机上,默认情况下选择以下内容:

    • 吞吐量垃圾收集器
    • 初始堆大小为1/64的物理内存,最大为1 GB
    • 最大堆大小为物理内存的1/4,最大为1 GB
    • 服务器运行时编译器

    有关64位系统的初始堆大小和最大堆大小,请参见Parallel Collector中的“默认堆大小”部分。

    服务器级计算机的定义适用于所有平台,但运行Windows操作系统版本的32位平台除外。表2-1“默认运行时编译器”显示了针对不同平台的运行时编译器所做的选择。

    • 客户端表示使用客户端运行时编译器。服务器表示使用服务器运行时编译器。
      选择该策略以即使在服务器类计算机上也使用客户端运行时编译器。之所以做出此选择,是因为历史上客户端应用程序(例如,交互式应用程序)在平台和操作系统的这种组合上运行的频率更高。
    • 仅支持服务器运行时编译器。

    基于行为的调整

    对于并行收集器,Java SE提供了两个垃圾收集调整参数,这些参数基于实现应用程序的指定行为:最大暂停时间目标和应用程序吞吐量目标;请注意,这些行为不能总是得到满足。该应用程序需要一个足够大的堆,以至少容纳所有实时数据。此外,最小堆大小可能会阻止达到这些期望的目标。

    最大暂停时间目标

    暂停时间是垃圾收集器停止应用程序并恢复不再使用的空间的持续时间。最大暂停时间目标的目的是限制这些暂停中的最长时间。垃圾回收器会保持平均的停顿时间和该平均值的方差。平均值是从执行开始时获取的,但经过加权后,最近的暂停次数会增加。如果平均时间加上暂停时间的方差大于最大暂停时间目标,则垃圾回收器认为未达到目标。

    最大暂停时间目标是通过命令行选项-XX:MaxGCPauseMillis = <nnn>指定的。
    这被解释为向垃圾收集器的提示,要求暂停时间为<nnn>毫秒或更短。垃圾收集器将调整Java堆大小和与垃圾收集相关的其他参数,以使垃圾收集的暂停时间短于<nnn>毫秒。默认情况下,没有最大暂停时间目标。这些调整可能导致垃圾回收器更频繁地发生,从而降低了应用程序的整体吞吐量。垃圾收集器会尝试在吞吐量目标之前达到任何暂停时间目标。但是,在某些情况下,无法达到所需的暂停时间目标。

    吞吐量目标

    吞吐量目标是根据收集垃圾所花费的时间和垃圾收集之外所花费的时间(称为应用程序时间)来衡量的。该目标由命令行选项-XX:GCTimeRatio = <nnn>指定。垃圾回收时间与应用程序时间的比率为1 /(1 + <nnn>)。例如,-XX:GCTimeRatio = 19将目标设置为垃圾收集总时间的1/20或5%。

    垃圾收集所花费的时间是年轻一代和老一代收集的总时间。如果无法满足吞吐量目标,则增加世代的大小,以增加应用程序在集合之间运行的时间。

    Footprint Goal

    如果已满足吞吐量和最大暂停时间目标,则垃圾收集器会减小堆的大小,直到无法满足其中一个目标(始终是吞吐量目标)。然后解决未实现的目标。

    调整策略

    除非您知道需要的堆大于默认的最大堆大小,否则不要为堆选择最大值。选择适合您的应用程序的吞吐量目标。

    堆将增长或缩小到可以支持所选吞吐量目标的大小。应用程序行为的更改可能导致堆增大或缩小。例如,如果应用程序开始以更高的速率分配,堆将增长以保持相同的吞吐量。

    如果堆增长到最大大小,并且无法满足吞吐量目标,则最大堆大小对于吞吐量目标而言太小。将最大堆大小设置为接近平台上总物理内存但不会导致应用程序交换的值。再次执行该应用程序。如果仍然没有达到吞吐量目标,那么对于平台上的可用内存来说,应用程序时间目标太高了。

    如果可以满足吞吐量目标,但暂停时间太长,则选择最大暂停时间目标。选择最大暂停时间目标可能意味着您的吞吐量目标将无法实现,因此请选择对应用程序可接受的折衷值。

    通常,随着垃圾收集器试图满足竞争目标,堆的大小会振荡。即使应用程序已达到稳定状态,也是如此。达到吞吐量目标(可能需要更大的堆)的压力与目标竞争,以获得最大的暂停时间和最小的占用空间(这两者都可能需要小的堆)。

    原文

    https://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/ergonomics.html

    相关文章

      网友评论

          本文标题:Ergonomics

          本文链接:https://www.haomeiwen.com/subject/byjjgctx.html