共用方式為


應用程式大小動態適應 (DATAS)

應用程式大小動態適應 (DATAS) GC 的目的在適應應用程式記憶體需求。 也就是說,應用程式的堆積大小應大略會與長期的資料大小成比例。 如果您的應用程式在不同規格的機器上執行相同的工作,堆積大小會相等或近似。 如果您的工作負載減輕或增加,系統會根據情況調整堆積大小。

相對地,伺服器 GC 模式的目的則是改善輸送量,並將這種程序視為機器上的主要工作。 系統在觸發下個 GC 前所允許的配置數量,是以輸送量為依據,而不是應用程式大小。 如有需要,且記憶體足夠,它可讓堆積量大幅成長。 在不同硬體規格的機器上執行此程序時,此成長所造成的堆積大小可能極為不同。 如果將此程序移至擁有更多核心和更多記憶體的機器,堆積的成長可能更大。 如果工作負載減輕了,伺服器 GC 也未必會積極調整堆積。

DATAS 對於多數需要按照工作負載的需求程度而調整堆積大小的「高載」工作負載而言很有幫助,尤其在需求減少時。 這種特性在記憶體受限的環境中特別重要,因為在某些程序的工作負載減輕時,它能夠容納更多程序。 它也有助於容量規劃。 DATAS 是以選用功能的形式在 .NET 8 推出,在 .NET 9 則預設啟用。

功能描述

為了達成調整應用程式大小的目的,同時維持合理效能,DATAS 會執行下列動作:

  • 它會根據長期的資料大小,設定下個 GC 觸發前所允許的配置數量上限。 這麼做有助於限制堆積大小。
  • 它會根據輸送量設定實際允許的配置數量。
  • 它會在需要時調整堆積數目。 它會先從一次堆積開始,也就是說在有許多執行緒配置時,會有一部分需要等候。 這對輸送量有負面影響。 DATAS 會按需要成長並減少堆積數目。 它透過這種方是,成為現有 GC 模式的混合體,能夠最少僅使用一次堆積 (例如工作站 GC),以及最多與機器核心相符的計數 (例如伺服器 GC)。
  • 如有需要,它會執行完整壓縮的 GC,防止片段化的數量太多,這麼做也有助於限制堆積大小。

基準測試結果

下圖所示為 TechEmpower JSON 和 Fortunes Benchmarks 的幾項基準測試結果。 請注意,在 Linux 的 48 核機器執行基準測試時,它的工作集大幅減少。 最大輸送量 (單位為 RPS) 顯示了 2-3% 的降幅,但工作集的改善幅度超過 80%。

工作集改善。

啟用 DATAS 後,Gen0 和 Gen1 GC 的數目大幅增加。

Gen0 和 Gen1 的計數。

如何停用 DATAS

如果您發現輸送量降低,您可以使用各種設定來停用 DATAS。 如需詳細資訊,請參閱應用程式大小動態適應 (DATAS)