深入JVM-垃圾收集器常用的GC參數


1.與串行回收器相關的參數

  • -XX:+UseSerialGC:在新生代和老年代使用串行收集器
  • -XX:SurvivorRatio:設置eden區大小和survivor區大小的比例
  • -XX:PretenureSizeThreshold:設置大對象直接進入老年代的閾值。當對象的大小超過這個值時,將直接在老年代分配。
  • -XX:MaxTenuringThreshold:設置對象進入老年代的年齡的最大值。每一次Minor GC后,對象年齡就加1。任何大於這個年齡的對象,一定會進入老年代。

2.與並行GC相關的參數

  • -XX:+UseParNewGC:在新生代使用並行收集器
  • -XX:+UseParallelOldGC:老年代使用並行回收收集器
  • -XX:ParallelGCThreads:設置用於垃圾回收的線程數。通常情況下可以和CPU數量相等,但在CPU數量較多的情況下,設置相對較小的數值也是合理的。
  • -XX:MaxGCPauseMillis:設置最大垃圾收集停頓時間。他的值是一個大於0的整數。收集器在工作時,會調整Java堆大小或者其他參數,盡可能把停頓時間控制在MaxGCPauseMillis以內。
  • -XX:GCTimeRatio:設置吞吐量大小。它是0-100的整數。假設GCTimeRatio的值為n,那么系統將花費不超過1/(1+n)的時間用於垃圾收集。
  • -XX:+UseAdaptiveSizePolicy:打開自適應GC策略。在這種模式下,新生代的大小、eden和survivor的比例、晉升老年代的對象年齡等參數會被自動調整,已達到在堆大小、吞吐量和停頓時間之間的平衡點。

3.與CMS回收期相關的參數

  • -XX:+UseConcMarkSweepGC:新生代使用並行收集器,老年代使用CMS+串行收集器
  • -XX:ParallelCMSThreads:設定CMS的線程數量
  • -XX:CMSInitiatingOccupancyFraction:設置CMS收集器在老年代空間被使用多少后觸發,默認為68%
  • -XX:+UseCMSCompactAtFullCollection:設置CMS收集器完成垃圾收集后是否要進行一次內存碎片的整理
  • -XX:CMSFullGCsBeforeCompaction:設定進行多少次CMS垃圾回收后,進行一次內存壓縮
  • -XX:+CMSClassUnloadingEnabled:允許對類元數據區進行回收
  • -XX:CMSInitiatingPermOccupancyFraction:當永久區占用率達到這一百分比時,啟動CMS回收(前提是-XX:+CMSClassUnloadingEnabled激活了)
  • -XX:UseCMSInitiatingOccupancyOnlyn:表示只在到達閾值的時候才進行CMS回收
  • -XX:+CMSIncrementalMode:使用增量模式,比較適合單CPU。增量模式在JDK 8中標記為廢棄,並將在JDK 9中徹底移除。

4.與G1回收期相關的參數

  • -XX:+UseG1GC:使用G1回收器
  • -XX:MaxGCPauseMillis:設置最大垃圾收集停頓時間
  • -XX:GCPauseIntervalMillis:設置停頓間隔時間

5.TLAB相關

  • -XX:+UseTLAB:開啟TLAB分配
  • -XX:+PrintTLAB:打印TLAB相關分配信息
  • -XX:TLABSize:設置TLAB大小
  • -XX:+ResizeTLAB:自動調整TLAB大小

6.其他參數

  • -XX:+DisableExplicitGC:禁用顯式GC
  • -XX:+ExplicitGCInvokesConcurrent:使用並發方式處理顯式GC


免責聲明!

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



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