天天看點

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

概念

Concurrent Mark Sweep 并發标記清除(多線程并且用的标記清除算法),會造成大量的記憶體碎片,離散的可用空間無法配置設定較大的對象

流程

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

參數

  • -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 區