你知道哪些或者你們線上使用什麼GC策略? 它有什麼優勢,適用於什麼場景?
GC 策略
Serial收集器 一個單執行緒的收集器,在進行垃圾收集時候,必須暫停其他所有的工作執行緒直到它收集結束。 特點:CPU利用率最高,停頓時間即使用者等待時間比較長。 適用場景:小型應用 通過JVM引數-XX:+UseSerialGC可以使用序列垃圾回收器。
Parallel收集器 採用多執行緒來通過掃描並壓縮堆 特點:停頓時間短,回收效率高,對吞吐量要求高。 適用場景:大型應用,科學計算,大規模資料採集等。 通過JVM引數 XX:+USeParNewGC 開啟併發標記掃描垃圾回收器。
CMS收集器 採用“標記-清除”演算法實現,使用多執行緒的演算法去掃描堆,對發現未使用的物件進行回收。 (1)初始標記 (2)併發標記 (3)併發預處理 (4)重新標記 (5)併發清除 (6)併發重置 特點:響應時間優先,減少垃圾收集停頓時間 適應場景:伺服器、電信領域等。 通過JVM引數 -XX:+UseConcMarkSweepGC設定
G1收集器 在G1中,堆被劃分成 許多個連續的區域(region)。採用G1演算法進行回收,吸收了CMS收集器特點。 特點:支援很大的堆,高吞吐量 –支援多CPU和垃圾回收執行緒 –在主執行緒暫停的情況下,使用並行收集 –在主執行緒執行的情況下,使用併發收集 實時目標:可配置在N毫秒內最多隻佔用M毫秒的時間進行垃圾回收 通過JVM引數 –XX:+UseG1GC 使用G1垃圾回收器
GC的選擇
官方推薦,需要根據應用的實際情況進行選擇。在選擇之前必須要對應用的堆大小、收集頻率進行估算。
使用SerialGC的場景:
1、如果應用的堆大小在100MB以內。
2、如果應用在一個單核單執行緒的伺服器上面,並且對應用暫停的時間無需求。
使用ParallelGC的場景:
如果需要應用在高峰期有較好的效能,但是對應用停頓時間無高要求(比如:停頓1s甚至更長)。
使用G1、CMS場景:
1、對應用的延遲有很高的要求。
2、如果記憶體大於6G請使用G1。