簡單說明
參數的使用方式
- -XX:+<option>開啓option參數,如:-XX:+UseParNew
- -XX:-<option>關閉option參數,如:-XX:-UseParallelGC
- -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 | 默認關閉 | 打印類卸載信息 |