(最新)JVM(HotSpot虛擬機)各種垃圾收集器優缺點

JVM中各種垃圾收集器優缺點
收集器名稱 優點 缺點 備註
Serial/Serial Old

1、所有收集器中內存消耗最小的

2、相比於其他收集器的單個線程開說,更簡單高效

1、單線程工作收集器,垃圾收集時必須暫停其他所有工作線程,且暫停時間不可控

Serial收集器對於運行在客戶端模式下、微小型服務或單線程服務的虛擬機來說是一個很好的選擇。

ParNew

1、是Serial的多線程併發版本

2、目前除了Serial只有它可以與CMS垃圾收集器配合使用

1、單核環境下不會比Serial更好

2、默認開啓的收集線程數與處理器核心數相同

 
Parallel Scavenge

1、Parallel Scavenge收集器的特點是它的關注點與其他收集器不同,CMS等收集器的關注點是儘可能地縮短垃圾收集時用戶線程的停頓時間,而Parallel Scavenge收集器的目標則是達到一個可控制的吞吐量(處理器用於運行用戶代碼的時間與處理器總消耗時間的比值:運行用戶代碼時間/運行用戶代碼時間+運行垃圾收集時間)。

2、可以精確配置吞吐量,或自動調整吞吐量(自適應調節策略)

1、可能造成競爭時間片時間增加,抑或垃圾回收不全面等問題,導致程序運行過程中付出的整體 GC 時間較長。

 

主要適合在後臺運算而不需要太多交互的分析任務。
Parallel Old 1、Parallel Scavenge的老年代版本,可以與Parallel Scavenge組成吞吐量優先的垃圾收集組合   在注重吞吐量或者處理器資源較爲稀缺的場合,都可以優先考慮Parallel Scavenge加Parallel Old收集器這個組合。
CMS

1、併發收集

2、低停頓

1、對處理器資源敏感,降低吞吐量,當處理器數少於四個時,影響會很大。

2、無法處理浮動垃圾,有可能引發Full GC

3、採用標記清楚算法,會產生大量碎片空間

目前很大一部分的Java應用集中在互聯網網站或者基於瀏覽器的B/S系統的服務端上,這類應用通常都會較爲關注服務的響應速度,希望系統停頓時間儘可能短,以給用戶帶來良好的交互體驗。CMS收集器就非常符合這類應用的需求。
G1(Garbage First)

1、開創了收集器面向局部收集的設計思路和基於Region的內存佈局形式

2、不再侷限於分代收集:衡量標準不再是它屬於哪個分代,而是哪塊內存中存放的垃圾數量最多,回收收益最大,這就是G1收集器的Mixed GC模式。

3、可以配置允許的收集停頓時間

4、優先處理回收價值大的Region

 

1、內存佔用和額外執行負載都比CMS要高

1、主要面向服務器端的垃圾收集器

2、目前在小內存應用上CMS的表現大概率仍然要會優於G1,而在大內存應用上G1則大多能發揮其優勢,

Shenandoah

1、支持併發整理算法,可以與用戶線程併發

2、默認不使用分代

3、Shenandoah摒棄了在G1中耗費大量內存和計算資源去維護的記憶集,改用名爲“連接矩陣”(Connection Matrix)的全局數據結構來記錄跨Region的引用關係,降低了處理跨代指針時的記憶集維護消耗,也降低了僞共享問題的發生概率。

1、不由oracle開發和維護  
ZGC(JDK11)

1、和Shenandoah高度相似且由Oracle研發

2、在任意堆內存大小下都可以把垃圾收集的停頓時間限制在十毫秒以內的低延遲。

3、使用了讀屏障、染色指針和內存多重映射等技術實現可併發的標記整理算法

   
Epsilon 1、自動內存管理子系統 1、不做任何回收行爲 如果應用只要運行數分鐘甚至數秒,只要Java虛擬機能正確分配內存,在堆耗盡之前就會退出,那顯然運行負載極小、沒有任何回收行爲的Epsilon便是很恰當的選擇。

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章