這個問題的答案主要受以下三個因素影響:
? ? ?1.應(yīng)用程序的主要關(guān)注點是什么耐齐?如果是數(shù)據(jù)分析浪秘、科學(xué)計算類的任務(wù),目標(biāo)是能盡快算出結(jié)果埠况,
那吞吐量就是主要關(guān)注點耸携;如果是SLA應(yīng)用,那停頓時間直接影響服務(wù)質(zhì)量辕翰,嚴(yán)重的甚至?xí)?dǎo)致事務(wù)
超時夺衍,這樣延遲就是主要關(guān)注點;而如果是客戶端應(yīng)用或者嵌入式應(yīng)用喜命,那垃圾收集的內(nèi)存占用則是
不可忽視的沟沙。
2.運行應(yīng)用的基礎(chǔ)設(shè)施如何?譬如硬件規(guī)格壁榕,要涉及的系統(tǒng)架構(gòu)是x86-32/64矛紫、SPARC還是
ARM/Aarch64;處理器的數(shù)量多少牌里,分配內(nèi)存的大屑找А;選擇的操作系統(tǒng)是Linux二庵、Solaris還是Windows
等贪染。
3.·使用JDK的發(fā)行商是什么?版本號是多少催享?是ZingJDK/Zulu杭隙、OracleJDK、Open-JDK因妙、OpenJ9抑
或是其他公司的發(fā)行版痰憎?該JDK對應(yīng)了《Java虛擬機(jī)規(guī)范》的哪個版本?
如果你有充足的預(yù)算但沒有太多調(diào)優(yōu)經(jīng)驗攀涵,那么一套帶商業(yè)技術(shù)支持的專有硬件或者軟件解決方案是不錯的選擇铣耘,Azul公司以前主推的Vega系統(tǒng)和現(xiàn)在主推的Zing VM是這方面的代表,這樣你就可以使用傳說中的C4收集器了以故。
如果你雖然沒有足夠預(yù)算去使用商業(yè)解決方案蜗细,但能夠掌控軟硬件型號,使用較新的版本,同時又特別注重延遲炉媒,那ZGC很值得嘗試踪区。
如果你對還處于實驗狀態(tài)的收集器的穩(wěn)定性有所顧慮,或者應(yīng)用必須運行在Windows操作系統(tǒng)下吊骤,那ZGC就無緣了缎岗,試試Shenandoah吧。
如果你接手的是遺留系統(tǒng)白粉,軟硬件基礎(chǔ)設(shè)施和JDK版本都比較落后传泊,那就根據(jù)內(nèi)存規(guī)模衡量一下,對于大概4GB到6GB以下的堆內(nèi)存鸭巴,CMS一般能處理得比較好眷细,而對于更大的堆內(nèi)存,可重點關(guān)注一下G1奕扣。
當(dāng)然薪鹦,以上都是僅從理論出發(fā)的分析掌敬,實戰(zhàn)中切不可紙上談兵惯豆,根據(jù)系統(tǒng)實際情況去測試才是選擇收集器的最終依據(jù)。