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