程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> JVM之CMS收集器,jvmcms收集

JVM之CMS收集器,jvmcms收集

編輯:JAVA綜合教程

JVM之CMS收集器,jvmcms收集


CMS(Concurrent Mark Sweep) 最短回收停頓,適合維持響應時間上的要求。

  • 初始標記 Initial mark:標記GC Roots能夠關聯到的對象。stop-mark。
  • 並發標記 Concurrent mark:GC Roots tracing,並行業務線程。
  • 重新標記 remark:重新標記並發標記過程中因為用戶程序同時運行而導致標記產生變動的對象的標記記錄。stop-mark。
  • 並發清除 Concurrent sweep:清除無用對象。

初始標記和重新標記占用時間比較短。

缺點:

  • 並發階段占用cpu資源,拖慢用戶程序,降低吞吐量,CMS默認啟用(CPU + 3)/4個線程執行。
  • 無法處理浮動垃圾(Floating Gorbage),並發清理階段用戶程序產生的垃圾,成為浮動垃圾,無法被當次處理。為了預留用戶程序運行使用內存,CMS需在老年代一定比例時就進行收集,通過-XX:CMSInitiatingOccupancyFraction設置老年代出發CMS比例。
  • 基於標記清除算法的CMS,會使老年代產生很多空間碎片,不利於大對象的使用,使用-UseCMSCompactAtFullCollection(默認true)來設置在將要進行CMS收集時進行碎片整理壓縮,此設置會造成停頓,同時可以設置-XX:CMSFullGCsBeforeCompaction來設置執行碎片整理的間隔CMS次數,即,執行多少次CMS收集後,執行一次碎片整理。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved