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