java啓動參數共分爲三類;java
其一是標準參數(-),全部的JVM實現都必須實現這些參數的功能,並且向後兼容;算法
其二是非標準參數(-X),默認jvm實現這些參數的功能,可是並不保證全部jvm實現都知足,且不保證向後兼容;併發
其三是非Stable參數(-XX),此類參數各個jvm實現會有所不一樣,未來可能會隨時取消,須要慎重使用;app
1、標準參數中比較有用的:jvm
2、非標準參數又稱爲擴展參數,通常用到最多的是性能
用-XX做爲前綴的參數列表在jvm中多是不健壯的,SUN也不推薦使用,後續可能會在沒有通知的狀況下就直接取消了;可是因爲這些參數中的確有不少是對咱們頗有用的,好比咱們常常會見到的-XX:PermSize、-XX:MaxPermSize等等;命令行
首先來介紹行爲參數:線程
參數及其默認值描述調試
-XX:-DisableExplicitGC禁止調用System.gc();但jvm的gc仍然有效日誌
-XX:+MaxFDLimit最大化文件描述符的數量限制
-XX:+ScavengeBeforeFullGC新生代GC優先於Full GC執行
-XX:+UseGCOverheadLimit在拋出OOM以前限制jvm耗費在GC上的時間比例
-XX:-UseConcMarkSweepGC對老生代採用併發標記交換算法進行GC
-XX:-UseParallelGC啓用並行GC
-XX:-UseParallelOldGC對Full GC啓用並行,當-XX:-UseParallelGC啓用時該項自動啓用
-XX:-UseSerialGC啓用串行GC
-XX:+UseThreadPriorities啓用本地線程優先級
串行(SerialGC)是jvm的默認GC方式,通常適用於小型應用和單處理器,算法比較簡單,GC效率也較高,但可能會給應用帶來停頓;
並行(ParallelGC)是指GC運行時,對應用程序運行沒有影響,GC和app二者的線程在併發執行,這樣能夠最大限度不影響app的運行;
併發(ConcMarkSweepGC)是指多個線程併發執行GC,通常適用於多處理器系統中,能夠提升GC的效率,但算法複雜,系統消耗較大;
性能調優參數列表:
參數及其默認值描述
-XX:LargePageSizeInBytes=4m設置用於Java堆的大頁面尺寸
-XX:MaxHeapFreeRatio=70GC後java堆中空閒量佔的最大比例
-XX:MaxNewSize=size新生成對象能佔用內存的最大值
-XX:MaxPermSize=64m老生代對象能佔用內存的最大值
-XX:MinHeapFreeRatio=40GC後java堆中空閒量佔的最小比例
-XX:NewRatio=2新生代內存容量與老生代內存容量的比例
-XX:NewSize=2.125m新生代對象生成時佔用內存的默認值
-XX:ReservedCodeCacheSize=32m保留代碼佔用的內存容量
-XX:ThreadStackSize=512設置線程棧大小,若爲0則使用系統默認值
-XX:+UseLargePages使用大頁面內存
調試參數列表:
參數及其默認值描述
-XX:-CITime打印消耗在JIT編譯的時間
-XX:ErrorFile=./hs_err_pid<pid>.log保存錯誤日誌或者數據到文件中
-XX:-ExtendedDTraceProbes開啓solaris特有的dtrace探針
-XX:HeapDumpPath=./java_pid<pid>.hprof指定導出堆信息時的路徑或文件名
-XX:-HeapDumpOnOutOfMemoryError當首次遭遇OOM時導出此時堆中相關信息
-XX:OnError="<cmd args>;<cmd args>"出現致命ERROR以後運行自定義命令
-XX:OnOutOfMemoryError="<cmd args>;<cmd args>"當首次遭遇OOM時執行自定義命令
-XX:-PrintClassHistogram遇到Ctrl-Break後打印類實例的柱狀信息,與jmap -histo功能相同
-XX:-PrintConcurrentLocks遇到Ctrl-Break後打印併發鎖的相關信息,與jstack -l功能相同
-XX:-PrintCommandLineFlags打印在命令行中出現過的標記
-XX:-PrintCompilation當一個方法被編譯時打印相關信息
-XX:-PrintGC每次GC時打印相關信息
-XX:-PrintGC Details每次GC時打印詳細信息
-XX:-PrintGCTimeStamps打印每次GC的時間戳
-XX:-TraceClassLoading跟蹤類的加載信息
-XX:-TraceClassLoadingPreorder跟蹤被引用到的全部類的加載信息
-XX:-TraceClassResolution跟蹤常量池
-XX:-TraceClassUnloading跟蹤類的卸載信息
-XX:-TraceLoaderConstraints跟蹤類加載器約束的相關信息
設置堆Heap大小:
-Xms20m 最小20m
-Xmx20m 最大20m
設置java虛擬機棧和本地方法棧大小:
-Xss128k
設置方法區大小:
-XX:PermSize=10M 最小10M
-XX:MaxPermSize=10M 最大10M
設置直接內存大小若不設置默認和(-Xmx同樣大):
-XX:MaxDirectMemorySize=10M
當首次遭遇OOM時導出此時堆中相關信息:
-XX:-HeapDumpOnOutOfMemoryError
設置新生代大小:
-Xmn
Eden與Survivor區比例:
-XX:SurvivorRatio=
晉升老年代對象年齡
-XX:PretenureSizeThreshold=
CMS收集器提供了開關用來開啓內存碎片整理當空間不夠須要Full GC時觸發,默認開啓:
-XX:+UseCMSCompactAtFullCollection
還有另外一個參數用來設置多少次Full GC後整理一次內存碎片:
-XX:CMSFullGCsBeforeCompaction=4
打開GC日誌:
-XX:+PrintGCDetails