我正在进行热点JVM垃圾回收,我有一个问题,
[First文章说
吞吐量目标以花费的时间来衡量收集垃圾和在垃圾收集之外花费的时间(称为申请时间)。
[Second一个说,
吞吐率是未浪费在垃圾中的总时间收藏,经过长时间考虑。通量包括分配所花费的时间(但需要调整分配速度通常不需要)。
[Second文章也说
吞吐量与内存量成反比可用。
我很困惑吞吐量是衡量在垃圾回收上花费的时间还是不是在垃圾回收上花费的时间,它与可用内存总量有何关系。
感谢您的帮助!
它与可用内存总量有何关系 ==>在大多数情况下(非IO绑定系统),随着任何进程可用内存的增加,它的性能也因此提高[[throughput 。对于JVM,随着堆大小的增加,GC将几乎没有工作要做。因此,吞吐量与内存成反比(并非总是如此。请记住这一点)。
接下来,吞吐量
是非GC线程可用来执行任务的总时间。第4章,“影响垃圾收集性能的因素”:
本指南的其余部分确实将术语用作总堆影响垃圾收集性能的最重要因素是总可用内存。因为收集发生在世代之间填满后,吞吐量与内存量成反比可用。
应用程序/系统吞吐量,并且吞吐量通常是三个GC调整目标之一,因此我认为这是一个错误。 (我认为指南的其余部分都不错)。
据我所知,通常应该相反:吞吐量通常与内存量成正比可用。
((不考虑调整特定效果,在某些情况下有可能增加内存并获得更少的吞吐量。)
我选择引用Java Performance by Charlie Hunt and Binu John的权威,我认为它提出了
throughput
,memory和latency之间的定义和关系,在第7章“调优JVM,逐步操作”(第256-257页):吞吐量是可以执行的工作量的度量每单位时间。吞吐量要求忽略延迟或响应能力。通常,增加吞吐量是以牺牲以下成本为代价的延迟增加和/或内存占用增加。性能吞吐量要求的一个示例是“应用程序应每秒执行2500个事务。”吞吐率
延迟和响应度
延迟或响应度是衡量两次之间的经过时间的量度当应用程序收到激励以执行某些工作并且该工作完成了。延迟或响应性要求被忽略吞吐量。通常情况下,响应速度加快或延迟降低以降低吞吐量和/或增加内存为代价足迹。延迟或响应度要求的一个示例是“申请应在60天内完成交易请求毫秒。”内存占用量
内存占用量是运行所需的内存量的量度以某种吞吐量,某种程度的延迟,和/或某种程度的可用性和可管理性。内存占用通常表示为运行所需的Java堆数量应用程序和/或运行程序所需的内存总量应用。通常,通过增加内存占用量来增加Java堆大小可以提高吞吐量或减少延迟,或两者兼而有之。随着可供应用程序使用的内存减少,通常会牺牲吞吐量或延迟。