Java 吞吐量垃圾收集

Java 吞吐量垃圾收集,java,garbage-collection,jvm-hotspot,Java,Garbage Collection,Jvm Hotspot,我正在进行垃圾收集,我有个问题 文章说 吞吐量目标以所花费的时间来衡量 收集垃圾和在垃圾收集之外花费的时间 (称为申请时间) 有人说, 吞吐量是未在垃圾中花费的总时间的百分比 收集,经过长期考虑。吞吐量 包括分配时间(但调整分配速度) 通常不需要) 文章还说 吞吐量与内存量成反比 可用 我不清楚吞吐量是否是衡量垃圾收集时间的指标,以及它与可用内存总量的关系 谢谢你的帮助 它与可用内存总量的关系如何==>在大多数情况下(非IO绑定系统),随着任何进程可用内存的增加,其性能也随之提高,吞吐量也随之增

我正在进行垃圾收集,我有个问题

文章说

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

有人说,

吞吐量是未在垃圾中花费的总时间的百分比 收集,经过长期考虑。吞吐量 包括分配时间(但调整分配速度) 通常不需要)

文章还说

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

我不清楚吞吐量是否是衡量垃圾收集时间的指标,以及它与可用内存总量的关系

谢谢你的帮助

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


接下来,吞吐量是非GC线程执行任务的总可用时间。

我认为引用的Oracle指南(“第二篇文章”)在这一段中有一个错误,或者很容易引起误解(并将吞吐量定义为不同的东西,但没有明确说明)。 您参考了《Java SE 6 HotSpot gc调优指南》,但错误也出现在Java 11版本中: JavaSE11,:

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

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

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

据我所知,这通常应该是相反的:

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

(不考虑特定于调优的效果,-在某些情况下,可能会增加内存并降低吞吐量。)

我选择引用权威人士的观点,我认为在第7章“分步调优JVM”第256-257页中,吞吐量、内存和延迟之间的定义和关系非常清楚:

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

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

延迟和响应能力 延迟,或响应性,是对 当一个应用程序收到一个刺激来做一些工作时,这个工作 完成了。延迟或响应性要求忽略 吞吐量通常情况下,响应速度增加或延迟降低 以降低吞吐量和/或增加内存为代价 足迹

延迟或响应性要求的一个例子是“ 申请应在60天内完成交易请求 毫秒。”

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


谢谢你!因此,为了重申和验证我的理解,吞吐量是应用程序线程(非gc线程)无缝完成任务而不被gc集合阻塞的可用时间!所以当堆增加时,这个时间会增加,那么它是如何与堆成反比的呢?