1. 程式人生 > >【深入淺出-JVM】(34):CMS 回收器

【深入淺出-JVM】(34):CMS 回收器

概念

Concurrent Mark Sweep 併發標記清除(多執行緒並且用的標記清除演算法),會造成大量的記憶體碎片,離散的可用空間無法分配較大的物件

流程

引數

  • -XX:-CMSPrecleaningEnabled
    不進行預清理
  • -XX:+UseConcMarkSweepGC
    啟動 CMS 回收器,預設執行緒數(ParallelGCThreads + 3) /4
  • -XX:ConcGCThreads -XX:ParallelCMSThreads
    設定併發執行緒數(併發是收集器和應用程式交替執行,並行是應用程式停止,多個執行緒一起執行 GC,並行回收器不是併發的是並行的)
  • -XX:CMSInitiatingOccupancyFraction
    回收閾值,預設 68(老年代空間只用率達到 68%時,執行一次 CMS 回收,如果 CMS 回收失敗,則虛擬機器將啟動老年代序列回收器,導致應用程式中斷)
    如果記憶體增長緩慢,則增大此值,減少老年代回收次數;如果記憶體增長過快,則降低此值,避免觸發老年代序列回收器
  • -XX:+UseCMSCompactAtFullCollection
    CMS 垃圾回收後進行一次碎片整理(單執行緒)
  • -XX:+CMSFullGCsBeforeCompaction
    進行多少次 CMS 後,進行一次記憶體壓縮
  • -XX:+CMSClassUnloadingEnabled
    讓 CMS 可以回收 Perm 區