【问题标题】:throughput garbage collection吞吐量垃圾收集
【发布时间】:2015-10-26 17:21:33
【问题描述】:

我正在通过 Hotspot JVM 垃圾收集,我有一个问题,

First文章说

吞吐量目标以花费的时间来衡量 收集垃圾在垃圾收集之外花费的时间 (简称申请时间)。

Second 有人说,

吞吐量是未花在垃圾中的总时间的百分比 收集,考虑了很长一段时间。吞吐量 包括分配时间(但调整分配速度 一般不需要)。

Second 的文章也说

吞吐量与内存量成反比 可用。

我很困惑吞吐量是衡量垃圾收集所花费的时间还是垃圾收集所花费的时间,以及它与可用内存总量的关系。

感谢您的帮助!

【问题讨论】:

    标签: java garbage-collection jvm-hotspot


    【解决方案1】:

    我认为不幸的是,引用的 Oracle 指南(“第二篇文章”)在本段中有错误,或者非常具有误导性(并将吞吐量定义为不同的东西而没有明确说明)。 您参考了 Java SE 6 HotSpot gc 调优指南,但错误也在 Java 11 版本中: Java SE11,HotSpot Virtual Machine Garbage Collection Tuning Guide, chapter 4, Factors Affecting Garbage Collection Performance

    第 4 章,“影响垃圾收集性能的因素”:

    总堆 影响垃圾收集性能的最重要因素是 总可用内存。因为收集发生在几代人的时候 填满,吞吐量与内存量成反比 可用。

    本指南的其余部分确实使用该术语作为 应用程序/系统吞吐量,而 吞吐量 通常是三个 GC 调整目标之一,所以我认为这是一个错误。 (我认为指南的其余部分很好)。

    据我了解,这通常应该是相反的:

    吞吐量通常与内存量成正比 可用。

    (不考虑调整特定效果,- 在某些情况下可能会增加内存并获得更少的吞吐量。)

    我选择引用这方面的权威Java Performance by Charlie Hunt and Binu John,我认为它介绍了吞吐量内存延迟之间的定义和关系em> 在第 7 章“Tuning the JVM, Step by Step”第 256-257 页中非常清楚:

    吞吐量 吞吐量是可以执行的工作量的度量 每单位时间。吞吐量要求忽略延迟或 反应能力。通常,增加的吞吐量是以牺牲 延迟增加和/或内存占用增加。

    性能吞吐量要求的一个示例是“应用程序 每秒应执行 2500 个事务。”

    延迟和响应 延迟或响应性是对之间经过的时间的度量 当应用程序收到刺激去做一些工作并且那个工作时 完成了。延迟或响应要求忽略 吞吐量。通常,响应速度提高或延迟降低 以降低吞吐量和/或增加内存为代价 足迹。

    延迟或响应要求的一个示例是“ 应用程序应在 60 内执行交易请求以完成 毫秒。”

    内存占用 内存占用量是运行所需内存量的度量 具有某种吞吐量、某种延迟的应用程序, 和/或某种程度的可用性和可管理性。内存占用 通常表示为运行所需的 Java 堆的数量 应用程序和/或运行该应用程序所需的内存总量 应用。通常,通过增加内存占用来增加 在 Java 中,堆大小可以提高吞吐量或减少延迟,或两者兼而有之。 随着可用于应用程序的内存减少, 通常会牺牲吞吐量或延迟。

    【讨论】:

      【解决方案2】:

      它与可用内存总量有何关系 ==> 在大多数情况下(非 IO 绑定系统),随着任何进程可用内存的增加,它的性能和因此 吞吐量增加。在 JVM 的情况下,随着堆大小的增加,GC 将几乎没有工作要做。因此,吞吐量与内存成反比(并非总是如此。记住这一点)。

      接下来,throughput 是非 GC 线程可用于执行其任务的总时间。

      【讨论】:

      • 感谢 TheLostMind !因此,重申并验证我的理解,吞吐量是应用程序线程(非 gc 线程)无缝执行其任务而不会被 gc 集合阻塞的时间!所以这个时间随着堆的增加而增加,那么它与堆的关系如何?
      猜你喜欢
      • 2019-09-19
      • 2011-01-21
      • 1970-01-01
      • 2018-12-30
      • 1970-01-01
      • 1970-01-01
      • 2010-12-13
      • 2012-05-04
      • 1970-01-01
      相关资源
      最近更新 更多