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,那么对象不会在新生代分配,直接进入老年代。