亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

我應該在單 CPU 系統上使用 SerialGC 還是 G1GC?

我應該在單 CPU 系統上使用 SerialGC 還是 G1GC?

MMMHUHU 2023-07-28 15:41:01
我有一個僅限 1 個 CPU 的容器,這是 java 11+ 的默認情況(也可能更舊),在這種情況下它給用戶 SerialGC。我應該強制執行線程 GC(如 G1GC)還是將其留在 SerialGC?哪一個在單CPU上性能更好?我一直認為 SerialGC 在這種情況下更好,但我經??吹?G1GC 在某些情況下被強制。編輯:我要求提供一般情況,因為我們有很多不同的應用程序使用相同的配置運行,并且很難測試每種情況。
查看完整描述

4 回答

?
慕尼黑的夜晚無繁華

TA貢獻1864條經驗 獲得超6個贊

根據文檔。

串行收集器使用單個線程來執行所有垃圾收集工作,這使得它相對高效,因為線程之間沒有通信開銷。

它最適合單處理器計算機,因為它無法利用多處理器硬件,盡管它在具有小數據集(最多大約 100 MB)的應用程序的多處理器上很有用。

我假設文檔中的處理器=核心(以及你的問題)。雖然文檔說串行收集器對于多核機器來說不是一個好的選擇,但它并沒有說其他收集器對于單核機器來說是不好的。

不過,其他收集器確實傾向于使用多線程,并且您無法在單核環境中獲得這些線程的全部好處。

那么為什么會看到使用G1GC呢?也許沒有別的原因,只是因為它是最新的。然而,如果有原因的話,很可能是 G1 提供的更短的 GC 暫停:

如果響應時間比總體吞吐量更重要,并且垃圾收集暫停必須保持在大約一秒以內,則使用 -XX:+UseG1GC 或 -XX:+UseConcMarkSweepGC 選擇大多數并發收集器。

最好的情況是,在這些情況下,他們使用不同的收集器測量性能并選擇提供最佳結果的收集器。

還要考慮評論中提到的字符串去重 Holger。這是一種特定的內存優化,可能是使用 G1GC 的原因。畢竟,如果您有一個核心,您可能也沒有太多內存可供使用。



查看完整回答
反對 回復 2023-07-28
?
紅顏莎娜

TA貢獻1842條經驗 獲得超13個贊

你想優化什么?您是否希望始終能夠極快地回答問題或擁有更好的整體表現?在第一種情況下,您應該以較短的 GC 暫停為目標,在第二種情況下,應以所有 GC 暫停的總和較低為目標。

您還需要考慮其他因素(即應用程序重新啟動的頻率),因此在我看來,最好的方法是數據驅動的方法。使用GC easy或GC 查看器分析每個應用程序的性能并采取相應措施。

請記住,GC 調整并不總是需要的,因此如果您不知道要實現什么目標,您可能會過早地進行優化。

一般來說:

  • 對于暫停時間要求不低并且在資源較少的環境中運行的應用程序使用串行GC

  • 如果您有更多資源或需要快速回答,請使用G1 垃圾收集器(記得測量更改前后的性能)


查看完整回答
反對 回復 2023-07-28
?
守候你守候我

TA貢獻1802條經驗 獲得超10個贊

作為更一般性的評論,不要假設因為您只有一個核心/CPU,所以使任務成為多線程不會有任何好處。根據所涉及的任務(在本例中為 GC),很可能存在一個線程被阻塞的情況(例如,等待 IO 完成),這允許執行另一部分任務的其他線程使用處理器并完成有用的工作。盡管一次只能運行一個線程,但總體性能得到了提高。



查看完整回答
反對 回復 2023-07-28
?
30秒到達戰場

TA貢獻1828條經驗 獲得超6個贊

本線程中未提及的一件重要事情是 G1GC 可以將內存返回(取消提交)給操作系統,因此如果其他應用程序正在服務器上運行,它們可以使用它。

我在從單 vCPU 服務器切換到 2 vCPU 服務器時注意到了這一點,因為 java 默認情況下對單 CPU 使用 SerialGC,對多 CPU 使用 G1GC(至少對于 JDK 11 是這樣)


查看完整回答
反對 回復 2023-07-28
  • 4 回答
  • 0 關注
  • 220 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號