最常用的JVM調優參數

簡單說明

參數的使用方式

  1. -XX:+<option>開啓option參數,如:-XX:+UseParNew
  2. -XX:-<option>關閉option參數,如:-XX:-UseParallelGC
  3. -XX:<option>=<value>將option參數設置爲value,如:-XX:NewRatio=4

除上面三種方式還有:

-Xms1024M設置最小堆內存爲1024M
-Xmx1024M設置最大堆內存爲1024M
-Xmn256M設置年輕代的大小爲256M
-Xss254K設置每個線程的堆棧大小,在相同的物理內存下,減少這個值能生成更多的線程

內存管理

注意:現在由於硬件的性能比較以前已經有了很大幅度的提升,因此我們通常安裝的都是Server模式的JDK,可以通過java -version查看具體當前運行的JVM模式。

參數 默認值 使用方式
ExplicitGCInvokesConcurrent 默認關閉 當收到來自System.gc()方法提交的垃圾收集申請時,使用CMS收集器進行收集
UseParNew 默認關閉

打開後,使用ParNew+Serial Old的收集組合方式進行內存回收,-XX:+UseParallelGC

(現在的硬件基本都是多核多線程CPU了,因此這種單線程方式基本不會再用了) 

UseConcMarkSweepGC 默認關閉 打開後,使用ParNew+CMS+Serial Old的收集組合進行內存回收。Serial Old作爲CMS的後備收集器,如果CMS收集器出現Concurrent Mode Failure,則使用Serial Old進行老年代的回收。-XX:+UseConcMarkSweepGC
UseParallelGC Server模式的虛擬機默認開啓,其他模式關閉 使用Parallel Scavenge+Serial Old的收集器組合進行內存回收
UseParallelOldGC 默認關閉 打開後,使用Parallel Scavenge+Parallel Old的收集器組合進行內存回收
SurvivorRatio 默認值爲8 新生代中,Eden去和一個Survivor區的容量比值,-XX:SurvivorRatio=8,則Eden區佔新生代容量的比例就爲 8/(8+1+1)即80%
PretenureSizeThreshold 無默認值 直接進入老年代的對象大小,設置這個參數後,大於這個參數的對象稱爲大對象,將直接進入老年代分配。-XX:PretenureSizeThreshold=1000,對象超過1000個字節將直接進入老年代分配
MaxTenuringThreshold 默認15

晉升到老年代的年齡,每個對象在堅持過一次MinorGC後,年齡增加1。

--XX:MaxTenuringThreshold=10,新生代對象年齡達到10後進入老年代

UseAdaptiveSizePolicy 默認開啓 動態調整Java堆中各個區域的大小及進入老年代的年齡,此參數是Parallel Scavenge收集器的參數,因此只有當UseParallelGC開啓,此參數才生效。當開啓此參數後,不需要指定新生代大小(-Xmn),Eden區域Survivor區的比例(-XX:SurvivorRatio),晉升老年代對象大小(-XX:PretenureSizeThreshold)等細節參數了
HandlePromotionFailure JDK1.6默認開啓 是否允許空間分配擔保失敗
ParallelGCThreads 無準確的默認值 設置並行GC時進行內存回收的線程數,cpu個數小於等於8個時,默認值爲cpu個數,當CPU個數大於8個時,默認值比CPU個數小
GCTimeRatio 默認值99 GC時間佔總時間的比率,默認值爲99,即允許1%的GC時間。僅在使用Parallel Scavenge收集器時生效
MaxGCPauseMillis 無默認值 設置GC的最大停頓時間。僅在使用Parallel Scavenge時生效
CMSInitiatingOccupancy 默認值68 設置CMS收集器在老年代空間被使用多少後觸發垃圾收集,僅在使用CMS收集器時生效
UseCMSCompactAtFullCollection 默認開啓 設置CMS收集器在完成垃圾收集後是否要進行一次內存碎片整理。僅在CMS收集器時生效
CMSFullGCsBeforeCompaction 無默認值 設置CMS收集器在進行若干次垃圾收集後再啓動一次內存碎片整理。僅在使用CMS收集器時生效
ScavengeBeforeFullGC 默認開啓 在FullGC發生之前觸發一次MinorGC
UseGCOverHeadLimit 默認開啓 禁止GC過程無限制的執行,如果過於頻繁,就直接發生OutOfMemory異常
UseTLAB Sever模式默認開啓 優先在本地緩存區分配對象,避免分配內存時的鎖定過程
MaxHeapFreeRatio 默認值爲70 當Xmx比Xms大時,空閒堆大於指定比率時,自動收縮堆空間
MinHeapFreeRatio 默認值爲40 當Xmx比Xms大時,空閒堆小於指定比率時,自動擴展堆空間
MaxPermSize(jdk1.8後用MaxMetaspaceSize) 默認值64 永久代最大值

多線程相關參數

參數 默認值 使用介紹
PreBlockSpin 默認值10 使用自旋鎖時默認的自旋次數
UseThreadPriorities 默認開啓 使用本地線程優先級
UseBiasedLocking 默認開啓 是否使用偏向鎖

 

調試參數

參數 默認值 使用介紹
HeapDumpOnOutOfMemoryError 默認關閉 當發生內存溢出異常時是否生成堆轉儲快照
PrintConcurrentLocks 默認關閉 大於JUC中鎖的狀態
PrintGCDetails 默認關閉 打印GC詳細信息
PrintGCTimeStamps 默認關閉 打印GC停頓耗時
PrintTenuringDistribution 默認關閉 打印GC後新生代各個年齡對象的大小
TraceClassLoading 默認關閉 答應類加載信息
TraceClassUnloading 默認關閉 打印類卸載信息

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章