簡體   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