JVM參數
JVM 三種類型參數
標配參數
比如-version
、-help
、-showversion
等,幾乎不會改變。
X參數
用得不多,比如-Xint
,解釋執行模式;-Xcomp
,編譯模式;-Xmixed
,開啓混合模式(默認)。
XX參數
重要,用於JVM調優。
JVM XX參數
布爾類型
公式:-XX:+某個屬性
、-XX:-某個屬性
,開啓或關閉某個功能。比如-XX:+PrintGCDetails
,開啓GC詳細信息。
KV鍵值類型
公式:-XX:屬性key=值value
。比如-XX:Metaspace=128m
、-XX:MaxTenuringThreshold=15
。
JVM Xms/Xmx參數
-Xms
和-Xmx
十分常見,用於設置初始堆大小和最大堆大小。第一眼看上去,既不像X參數,也不像XX參數。實際上-Xms
等價於-XX:InitialHeapSize
,-Xmx
等價於-XX:MaxHeapSize
。所以-Xms
和-Xmx
屬於XX參數。
JVM 查看參數
查看某個參數
使用jps -l
配合jinfo -flag JVM參數 pid
。先用jsp -l
查看java進程,選擇某個進程號。
17888 org.jetbrains.jps.cmdline.Launcher
5360 org.jetbrains.idea.maven.server.RemoteMavenServer
18052 demo3.demo3
jinfo -flag PrintGCDetails 18052
可以查看18052 Java進程的PrintGCDetails
參數信息。
-XX:-PrintGCDetails
查看所有參數
使用jps -l
配合jinfo -flags pid
可以查看所有參數。
也可以使用java -XX:+PrintFlagsInitial
[Global flags]
intx ActiveProcessorCount = -1 {product}
uintx AdaptiveSizeDecrementScaleFactor = 4 {product}
uintx AdaptiveSizeMajorGCDecayTimeScale = 10 {product}
uintx AdaptiveSizePausePolicy = 0 {product}
······
uintx YoungPLABSize = 4096 {product}
bool ZeroTLAB = false {product}
intx hashCode = 5 {product}
查看修改後的參數
使用java -XX:PrintFlagsFinal
可以查看修改後的參數,與上面類似。只是修改過後是:=
而不是=
。
查看常見參數
如果不想查看所有參數,可以用-XX:+PrintCommandLineFlags
查看常用參數。
-XX:InitialHeapSize=132375936 -XX:MaxHeapSize=2118014976 -XX:+PrintCommandLineFlags -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:-UseLargePagesIndividualAllocation -XX:+UseParallelGC
JVM 常用參數
-Xmx/-Xms
最大和初始堆大小。最大默認爲物理內存的1/4,初始默認爲物理內存的1/64。
-Xss
等價於-XX:ThresholdStackSize
。用於設置單個棧的大小,系統默認值是0,不代表棧大小爲0。而是根據操作系統的不同,有不同的值。比如64位的Linux系統是1024K,而Windows系統依賴於虛擬內存。
-Xmn
新生代大小,一般不調。
-XX:MetaspaceSize
設置元空間大小。
-XX:+PrintGCDetails
輸出GC收集信息,包含GC
和Full GC
信息。
-XX:SurvivorRatio
新生代中,Eden
區和兩個Survivor
區的比例,默認是8:1:1
。通過-XX:SurvivorRatio=4
改成4:1:1
-XX:NewRatio
老生代和新年代的比列,默認是2,即老年代佔2,新生代佔1。如果改成-XX:NewRatio=4
,則老年代佔4,新生代佔1。
-XX:MaxTenuringThreshold
新生代設置進入老年代的時間,默認是新生代逃過15次GC後,進入老年代。如果改成0,那麼對象不會在新生代分配,直接進入老年代。