繁体   English   中英

吞吐量垃圾收集

[英]throughput garbage collection

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

第一篇文章说

吞吐量目标是根据收集垃圾 所花费的时间和垃圾收集之外所花费的时间 (称为应用程序时间)来衡量的。

第二个人说

吞吐量是长时间内未花费在垃圾回收上总时间的百分比。 吞吐量包括分配所花费的时间(但是通常不需要调整分配速度)。

还有第二篇文章说

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

我感到困惑的是,吞吐量是衡量浪费在垃圾收集上还是没有花费在垃圾收集上的时间,它与可用内存总量有何关系。

感谢您的帮助!

它是如何涉及存储器可用 ==>在大多数情况下(非IO结合系统) 的总量 ,作为提供给任何过程增加存储器,它的性能,并因此可以通过增加。 对于JVM,随着堆大小的增加,GC将几乎没有工作要做。 因此, 吞吐量与内存成反比(并非总是如此。请记住这一点)。

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

我认为所引用的Oracle指南(“第二篇文章”)在本段中有错误,或者非常具有误导性(并且在没有明确说明的情况下将吞吐量定义为不同的东西)。 您参考了Java SE 6 HotSpot gc调整指南,但Java 11版本中也存在该错误:Java SE11, HotSpot虚拟机垃圾收集调整指南,第4章,影响垃圾收集性能的因素

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

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

本指南的其余部分确实将术语称为应用程序/系统吞吐量 ,并且吞吐量通常是三个GC调整目标之一,因此我认为这是一个错误。 (我认为指南的其余部分很好)。

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

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

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

我选择从Charlie Hunt和Binu John撰写的Java Performance一书中引用权威,我认为在第7章“逐步调试JVM”(第256页)中非常清楚地介绍了吞吐量内存延迟之间的定义和关系。 257:

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

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

延迟和响应性延迟或响应性是对应用程序收到激励以完成某些工作到完成工作之间经过的时间的度量。 延迟或响应性要求会忽略吞吐量。 通常,增加响应速度或降低延迟会以降低吞吐量和/或增加内存占用为代价。

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

内存占用空间内存占用空间是衡量以某个级别的吞吐量,某个级别的延迟和/或某个级别的可用性和可管理性运行应用程序所需的内存量的度量。 内存占用量通常表示为运行应用程序所需的Java堆数量和/或运行应用程序所需的内存总量。 通常,通过增加Java堆大小来增加内存占用量可以提高吞吐量或减少延迟,或两者兼而有之。 随着可供应用程序使用的内存减少,通常会牺牲吞吐量或等待时间。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM