堆空間
-Xms32m
初始堆空間
-Xmx32m
最大可用堆空間
-Xmn1m
新生代的大小
-XX:NewRatio=2
老年代/新生代
-Xss128K
線程的最大棧空間
-XX:TargetSurvivorRatio=15
survivor區的目標使用率
堆溢出處理
-XX:+HeapDumpOnOutOfMemoryError
導出內存溢出時整個堆信息
-XX:HeapDumpPath=d:/a.dump
導出堆dump文件的存放路徑
-XX:-UseGCOverheadLimit
禁止GC效率低下引起的OOM
設置相等
減少程序運行時進行垃圾回收次數,從而提高程序的性能
基本策略
儘可能將對象預留在新生代,減少老年代GC的次數
JVM優化
-XX:+UseCompressedOops
開啓壓縮(默認)
允許在64位JVM中內存引用地址爲32位
-XX:+DoEscapeAnalysis
開啓逃逸分析 (默認)
-XX:+EliminateAllocations
標題替換(默認)
TLAB
-XX:+UseTLAB
開啓TLAB(l默認)
TLAB
Thread Local Allocation Buffer
線程本地分配緩存
-XX:+PrintTLAB
打開跟蹤TLAB參數
-XX:TLABSize=102400
手工指定TLAB的大小
-XX:-ResizeTLAB
禁用自動調整TLAB的大小
-XX:TLABRefillWasteFraction=100
TLAB中允許產生浪費的比例(默認值爲64)
約爲1/64的TLAB空間大小作爲 refill_waste
垃圾回收
垃圾回收器
-XX:+UseParallelGC
新生代使用ParallelGC回收器,老年代使用串行收集器
-XX:+UseConcMarkSweepGC
新生代使用ParNew回收器,老年代使用CMS
串行回收器
-XX:+UseSerialGC
新生代、老年代都使用串行垃圾回收器
-XX:SurvivorRatio=2
新生代中 eden空間和from/to空間的比例關係
-XX:PretenureSizeThreshold=1000
對象直接晉升到老年代的閾值
-XX:MaxTenuringThreshold=15
新生代對象的最大年齡(默認15)
並行GC
-XX:+UseParNewGC
新生代使用ParNew回收器,老年代使用串行收集器
-XX:+UseParallelOldGC
新生代使用ParallelGC回收器,老年代使用ParallelOldGC回收器
-XX:ParallelGCThreads
ParNew回收器線程數量
CPU數量
CPU數量大於8時
CPU_Count*5/8+3
-XX:MaxGCPauseMillis
設置最大垃圾收集停頓時間
使用較小的堆
-XX:GCTimeRatio
設置吞吐量大小
系統將花費不超過1/(1+n)的時間用於垃圾收集
默認情況下 1/(1+99)
-XX:UseAdaptiveSizePolicy
打開自適應的GC策略
自動調整:新生代的大小、eden和survivior的比例、晉升老年代的對象年齡等
CMS
-XX:+UseConcMarkSweepGC
啓用CMS回收器
-XX:-CMSPrecleaningEnabled
CMS 不進行預清理
-XX:ParallelCMSThreads
併發線程數量
如果不配置此項目,默認併發線程數是(ParallelGCThreads+3)/4
ParallelGCThreads
GC並行時使用的線程數量
-XX:CMSInitiatingOccupancyFraction
指定當老年代空間使用率真達到多少時,進行一次CMS垃圾回收
默認是68
大
降低CMS的觸發頻率
內存不足導致CMS回收失敗,啓動老年代串行收集器
小
避免頻繁觸發老年代串行收集器
+XX:+UseCMSCompactAtFullCollection
設定進行多少次CMS回收後,進行一次內存壓縮
非併發
+XX:CMSClassUnloadingEnabled
如果條件允許,系統會用CMS的機制回收Perm區Class數據
G1
-XX:UseG!GC
打開G1收集器開關
-XX:MaxGCPauseMillis
指定目標最大停頓時間
G1調整新生代和老年代的比例、調整堆大小、調整晉升年齡等手段,試圖達到預設目標
縮短
增加新生代GC的次數
老年代區域,在混合GC收集時,一次收集的區域數量會變少
增加進行FullGC的可能性
核心
-XX:ParallelGCThreads
設置並行回收時,GC的工作線程數量
核心
-XX:InitiatingHeapOccupancyPercent
指定當整個堆使用率達到多少時,觸發併發標記週期的執行
默認值 45
爲滿足MaxGCPauseMillis
偏大
會導致併發週期遲遲得不到啓動
Full GC可能性增加
偏小
併發週期非常頻繁
大量GC線程搶佔CPU
應用程序的性能有所下降
跟蹤垃圾回收
-XX:+printGC
打印GC的簡要信息
-XX:+PrintGCDetails
打印GC的詳細信息,包括當前堆的各個區間的使用情況,下界,當前上界和上界
-XX:+PrintHeapAtGC
打印全面的堆信息
-XX:+PrintGCTimeStamps
GC發生的時間
-XX:+PrintGCApplicationConcurrentTime
應用程序的執行時間
-XX:+PrintGCApplicationStoppedTime
由於GC而產生的停頓時間
+XX:PrintReferenceGC
系統內的軟引用、弱引用、虛引用和Finalize隊列
-Xloggc:log/gc.log
將GC日誌以文件的形式輸出
類加載/卸載的跟蹤
-XX:+TraceClassLoading
跟蹤類的加載
-XX:TraceClassUnloading
跟蹤類的卸載
-XX:+PrintClassHistogram
系統中類的分佈情況
系統參數
-XX:+PrintCommandLineFlags
傳遞給虛擬機的顯式和隱式參數
-XX:+PrintVMOptions
打印虛擬機接受到的命令行顯式參數
-XX:+PrintFlagsFinal
打印所有的系統參數的值
方法區
JDK6
-XX:PermSize
永久區大小,默認64MB
-XX:MaxPermSize
最大永久區大小
JDK8
-XX:MaxMetaspaceSize
最大元數據區大小
直接內存
-XX:MaxDirectMemorySizee
最大可用直接內存