垃圾收集器

串行回收和並行回收

串行回收:JDK1.5 前的默認算法,執行垃圾回收時程序中止時間較長,缺點是隻有一個線程算法

並行回收:多個線程執行垃圾回收,適合吞吐量系統,回收時系統中止運行多線程

Serial 收集器

最古老的、最穩定的的收集器,可能產生較長的停頓,僅適用單線程收集,新生代、老年代均採用串行回收,新生代採用賦值算法,老年代採用標記->壓縮算法,垃圾收集過程當中會 Stop The World(服務暫停)併發

特色:CPU利用率最高,停頓時間即用戶等待時間比較長ide

適用場景:小型應用工具

-XX:+UseSerialGC 可使用串行垃圾回收器性能

ParNew收集器

多線程版本 Serial,新生代並行,老年代串行測試

-XX:+UseParNewGC 使用 ParNew 收集器線程

-XX:ParallelGCThreads 限制線程數量對象

Parallel 收集器

Parallel Scavenge 收集器相似 ParNew 收集器,Parallel 收集器更關注系統的吞吐量,能夠經過參數來打開自適應調節策略,虛擬機會根據當前系統的運行狀況收集性能監控信息,動態調整這些參數以提供最合適的停頓時間或最大的吞吐量,也能夠經過參數控制GC的時間不大於多少毫秒或者比例,新生代複製算法,老年代標記-壓縮內存

採用多線程來經過掃描並壓縮堆
特色:停頓時間短,回收效率高,對吞吐量要求高
適用場景:大型應用,科學計算,大規模數據採集等

XX:+USeParNewGC 打開併發標記掃描垃圾回收器

Cms 收集器

CMS 爲下降延遲而生,經過儘量的並行執行垃圾回收的幾個階段來把延遲控制到最低,CMS 是老年代收集器,通常狀況下采用 ParNew 來配合執行新生代的回收

收集階段:

  • 初始標記

  • 併發標記:

  • 預清理

  • 可中斷預清理

  • 最終標記

  • 併發清除

  • 併發重置

其中初始標記、從新標記這兩個步驟仍然須要 Stop The World,初始標記僅僅只是標記一下 GC Roots 能直接關聯到的對象,速度很快,併發標記階段就是進行 GC Roots Tracing 的過程,而從新標記階段則是爲了修正併發標記期間,因用戶程序繼續運做而致使標記產生變更的那一部分對象的標記記錄,這個階段的停頓時間通常會比初始標記階段稍長一些,但遠比並發標記的時間短

因爲整個過程當中耗時最長的併發標記和併發清除過程當中,收集器線程均可以與用戶線程一塊兒工做,因此整體上來講,CMS收集器的內存回收過程是與用戶線程一塊兒併發地執行

特色:響應時間優先,減小垃圾收集停頓時間

優勢:併發採集,低停頓

缺點:產生大量空間碎片、併發階段會下降吞吐量

-XX:+UseConcMarkSweepGC

G1 收集器

在G1中,堆被劃分紅 許多個連續的區域(region)。採用G1算法進行回收,吸取了CMS收集器特色

特色:

  • 支持很大的堆,高吞吐量

  • 支持多 CPU 垃圾回收

  • 在主線程暫停時,使用並行回收

  • 在主線程運行時,使用併發回收

-XX:+UseG1GC 使用G1垃圾回收器

使用 Jmeter 壓力測試工具測試吞吐量以測試幾種收集器

相關文章
相關標籤/搜索