工作中常用的 JVM 配置引數有哪些?
Java 8 為例
日誌
-XX:+PrintFlagsFinal,列印JVM所有引數的值
-XX:+PrintGC,列印GC資訊
-XX:+PrintGCDetails,列印GC詳細資訊
-XX:+PrintGCTimeStamps,列印GC的時間戳
-Xloggc:filename,設定GC log檔案的位置
-XX:+PrintTenuringDistribution,檢視熬過收集後剩餘物件的年齡分佈資訊
記憶體設定
-Xms,設定堆的初始化記憶體大小
-Xmx,設定堆的最大記憶體
-Xmn,設定新生代記憶體大小
-Xss,設定執行緒棧大小
-XX:NewRatio,新生代與老年代比值
-XX:SurvivorRatio,新生代中Eden區與兩個Survivor區的比值,預設為8,即Eden:Survivor:Survivor=8:1:1
-XX:MaxTenuringThreshold,從年輕代到老年代,最大晉升年齡。CMS 下預設為 6,G1 下預設為 15
-XX:MetaspaceSize,設定元空間的大小,第一次超過將觸發 GC
-XX:MaxMetaspaceSize,元空間最大值
-XX:MaxDirectMemorySize,用於設定直接記憶體的最大值,限制通過 DirectByteBuffer 申請的記憶體
-XX:ReservedCodeCacheSize,用於設定 JIT 編譯後的程式碼存放區大小,如果觀察到這個值有限制,可以適當調大,一般夠用即可
設定垃圾收集相關
-XX:+UseSerialGC,設定序列收集器
-XX:+UseParallelGC,設定並行收集器
-XX:+UseConcMarkSweepGC,使用CMS收集器
-XX:ParallelGCThreads,設定Parallel GC的執行緒數
-XX:MaxGCPauseMillis,GC最大暫停時間 ms
-XX:+UseG1GC,使用G1垃圾收集器
CMS 垃圾回收器相關
-XX:+UseCMSInitiatingOccupancyOnly
-XX:CMSInitiatingOccupancyFraction,與前者配合使用,指定MajorGC的發生時機
-XX:+ExplicitGCInvokesConcurrent,程式碼呼叫 System.gc() 開始並行 FullGC,建議加上這個引數
-XX:+CMSScavengeBeforeRemark,表示開啟或關閉在 CMS 重新標記階段之前的清除(YGC)嘗試,它可以降低 remark 時間,建議加上
-XX:+ParallelRefProcEnabled,可以用來並行處理 Reference,以加快處理速度,縮短耗時
G1 垃圾回收器相關
-XX:MaxGCPauseMillis,用於設定目標停頓時間,G1 會盡力達成
-XX:G1HeapRegionSize,用於設定小堆區大小,建議保持預設
-XX:InitiatingHeapOccupancyPercent,表示當整個堆記憶體使用達到一定比例(預設是 45%),併發標記階段就會被啟動
-XX:ConcGCThreads,表示併發垃圾收集器使用的執行緒數量,預設值隨 JVM 執行的平臺不同而變動,不建議修改