GC選擇之CMS 並發標記清除


CMS收集器 Concurrent Markup Sweep 並發標記清除
 使用了標記-清除算法 與標記-壓縮相比,並發階段會降低吞吐量
 算法作用在老年代以及永久區(新生代使用ParNew)
 -XX:+UseConcMarkSweepGC
CMS運行過程
 1.初始標記(用戶線程停止)
  根可以關聯到的對象
  速度快
 2.並發標記(和用戶線程一起)
  主要標記過程,標記全部對象
 3.重新標記(用戶線程停止)
  由於並發標記時,用戶線程依然進行因此在正式清理前,再做修正。
 4.並發清除(和用戶線程一起)
  基於標記結果,直接清理對象
 
特點:
1.盡可能降低停頓
2.會影響系統整體吞吐量和性能
 比如,在用戶線程運行過程中,分一半CPU去做CMS GC,系統性能在GC階段,反應速度就下降一半。
3.清理不徹底。
 在清理階段,用戶線程還在執行,會產生新的垃圾,無法清理。
4.因為和用戶線程一起執行,不能在空間將滿時再清理。
 -XX:CMSInitiatingOccupancyFraction設置觸發GC的閾值。 設定老年代空間被使用多少后觸發。
 如果不幸內存預留空間不足,就會引起concurrent mode failure.
5.在CMS遇到空間不足時,可以使用串行收集器作為后備。
6.做標記清除時,可以不停止應用線程,但會產生內存碎片,而做標記壓縮時,會Stop-The-World,但不會產生內存碎片。
 -XX:+UseCMSCompactAtFullCollection Full GC后,進行一次碎片整理。
  整理過程是獨占的,會引起停頓時間變長。
 
減輕GC壓力 軟件如何架構,代碼如何寫,堆空間如何分配。

1.性能的根本在應用。
2.GC參數屬於微調。
3.GC參數設置不合理,會影響性能,產生大的延時。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM