Oracle提議將G1作為Java 9的默認(rèn)垃圾收集器
Oracle正在考慮將JEP 248包含到Java 9的JEP列表中,即在服務(wù)器配置中將G1作為默認(rèn)垃圾收集器。該決定在Java社區(qū)引發(fā)了一些爭論,許多人都認(rèn)為并發(fā)標(biāo)記和掃描(CMS)收集器可能更合適。
如果該決定付諸實施,那么G1將取代并行垃圾收集器成為服務(wù)器配置的默認(rèn)選項。正如Oracle在內(nèi)存管理白皮書中 描述的那樣,并行垃圾收集器的設(shè)計初衷是,通過不常發(fā)生(但可能時間比較長)的Stop-The-World(STW)中斷***化應(yīng)用程序吞吐量。并行 垃圾收集器將消耗的總計算時間最小化,長遠來看,其破壞性更小,因此可以提供更好的整體性能。該收集器非常適合對響應(yīng)時間要求不高的應(yīng)用程序,比如,批處 理。
另一方面,正如前G1性能負(fù)責(zé)人Monica Beckwith先前在InfoQ上闡述的那樣,Garbage First(G1)的設(shè)計初衷是,以更高的計算成本為代價最小化STW中斷時間。G1更適合于低延遲應(yīng)用程序,如Web服務(wù)器,這也體現(xiàn)了Stefan Johansson在JEP中所描述的動機:
通常來說,限制GC中斷時間比***化吞吐量更重要。對大部分用戶而言,與面向吞吐量的收集器相比(如并行垃圾收集器),切換到中斷時間短的垃圾收集器(如G1),可以獲得更好的整體體驗。
這里出現(xiàn)了爭議。HotSpot因為同樣的目的引入了CMS,而實際上,按照Oracle的描述,CMS“設(shè)計用于更希望縮短垃圾收集中斷時間的應(yīng)用程序,以及在運行時可以與垃圾收集器共享處理器資源的應(yīng)用程序”。許多公開的基準(zhǔn)測試都表明,在內(nèi)存占用相對較小的應(yīng)用程序中,CMS的性能往往要勝過G1,這與Oracle對G1的描述一致,即G1適用于堆大小為6GB及以上的服務(wù)器應(yīng)用程序。
在最近的一次交流中,性能專家Kirk Pepperdine特別指出,谷歌已經(jīng)向CMS貢獻了若干改進,但它們從沒有出現(xiàn)在HotSpot中。他還補充說,雖然長遠看G1可能是更好的選擇,但Oracle的設(shè)計方案已經(jīng)剝奪了社區(qū)從CMS獲得更好體驗的權(quán)力。
查看英文原文:Oracle Proposes G1 as the Default Garbage Collector for Java 9