参数前-和+含义
#第一种-XX:-UseSerialGC就是Boolean类型的,-代表否
C:\Users\test>jinfo -flag UseSerialGC 17696
-XX:-UseSerialGC
#第二种-XX:+UseParallelGC也是Boolean类型的,+代表是
C:\Users\test>jinfo -flag UseParallelGC 17696
-XX:+UseParallelGC
#第三种-XX:MaxHeapSize=734003200是kv键值对类型的
C:\Users\test>jinfo -flag MaxHeapSize 17696
-XX:MaxHeapSize=734003200
-XX:+PrintFlagsInitial
java -XX:+PrintFlagsInitial:主要查看初始默认,jvm出场默认参数
java -XX:+PrintFlagsInitial -version
后面如果是{default}就表示是默认的,如果是{command line}就表示是被改过的
-XX:+PrintFlagsFinal
java -XX:+PrintFlagsFinal
java -XX:+PrintFlagsFinal -version
运行java命令的同时打印出参数,查看最终参数
后面如果是{default}就表示是默认的,如果是{command line}就表示是被改过的
-XX:+PrintCommandLineFlags
java -XX:+PrintCommandLineFlags -version
-Xms
初始化的堆内存,-Xms等价于-XX:InitialHeapSize(默认为物理内存的六十四分之一)例如:-Xms1024M;
-Xmx
最大堆内存,-Xmx等价于-XX:MaxHeapSize(默认为物理内存的四分之一)例如:-Xmx1024M
-Xss
设置单个线程栈的大小,等价于-XX:ThreadStackSize(默认为512k~1024k)
D:\jdk1.8.0_91>jinfo -flag ThreadStackSize 14968
-XX:ThreadStackSize=0
-Xmn
设置年轻代大小
-XX:MetaspaceSize
设置元空间大小,默认元空间的大小是21M,如果频繁的new对象的话,就会把元空间撑爆,OOM内存溢出,出现错误:OutOfMemoryError:metaspace
-XX:+PrintGCDetails
输出详细的GC收集日志信息
D:\jdk1.8.0_91>java -XX:+PrintGCDetails 14968
Heap
PSYoungGen total 75264K, used 3870K [0x000000076c180000, 0x0000000771580000, 0x00000007c0000000)
eden space 64512K, 6% used [0x000000076c180000,0x000000076c547b10,0x0000000770080000)
from space 10752K, 0% used [0x0000000770b00000,0x0000000770b00000,0x0000000771580000)
to space 10752K, 0% used [0x0000000770080000,0x0000000770080000,0x0000000770b00000)
ParOldGen total 172032K, used 0K [0x00000006c4400000, 0x00000006cec00000, 0x000000076c180000)
object space 172032K, 0% used [0x00000006c4400000,0x00000006c4400000,0x00000006cec00000)
Metaspace used 2771K, capacity 4480K, committed 4480K, reserved 1056768K
class space used 319K, capacity 384K, committed 384K, reserved 1048576K
[GC (Allocation Failure) [PSYoungGen: 512K->488K(1024K)] 512K->496K(1536K), 0.0010906 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]
[Full GC (Ergonomics) [PSYoungGen: 488K->463K(1024K)] [ParOldGen: 408K->358K(512K)] 896K->822K(1536K), [Metaspace: 2930K->2930K(1056768K)], 0.0062971 secs] [Times: user=0.00 sys=0.00, real=0.01 secs]
-XX:SurvivorRatio
设置新生代中Eden和S0/S1空间的比例,默认-XX:SurvivorRatio=8,Eden:S0:S1=8:1:1
假如-XX:SurvivorRatio=4,那么Eden:S0:S1=4:1:1,SurvivorRatio值就是设置Eden区的比例占多少,S0/S1相同
#设置为:-XX:survivorRatio=8
eden space 68096K, 22% used [0x000000076dd00000,0x000000076eba5c08,0x0000000771f80000)
from space 8192K, 0% used [0x0000000772780000,0x0000000772780000,0x0000000772f80000)
to space 8192K, 0% used [0x0000000771f80000,0x0000000771f80000,0x0000000772780000)
#设置为:-XX:survivorRatio=4
eden space 56832K, 26% used [0x000000076dd00000,0x000000076eb76bc0,0x0000000771480000)
from space 13824K, 0% used [0x0000000772200000,0x0000000772200000,0x0000000772f80000)
to space 13824K, 0% used [0x0000000771480000,0x0000000771480000,0x0000000772200000)
-XX:NewRatio
配置年轻代和老年代在堆结构的占比,NewRatio值就是设置老年代的占比,剩下的1给新生代。
默认:-XX:NewRatio=2,表示新生代占1,老年代占2,年轻代占整个堆的1/3
假如:-XX:NewRatio=4,表示新生代占1,老年代占4,年轻代占整个堆的1/5
-XX:MaxTenuringThreshold
设置垃圾的最大年龄,如果设置为0的话,则年轻代对象不经过survivor区,直接进入年老代,对于年老代比较多的应用,可以提高效率,如果将此值设置为一个较大值,则年轻代对象会在survivor区进行多次复制,这样可以增加对象在年轻代的存活时间,增加在年轻代即被回收的概论。
这个值只能设置为0到15之间
D:\jdk1.8.0_91>jinfo -flag MaxTenuringThreshold 14968
-XX:MaxTenuringThreshold=15
-XX:+UseSerialGC
使用串行垃圾回收器
-XX:+UseParallelGC
使用parallels cavenge回收器
-XX:+UseParNewGC
使用ParNew垃圾回收器
-XX:+UseConcMarkSweepGC
使用CMS垃圾回收器
-XX:+UseG1GC
使用G1回收器
项目启动配置参数
启动微服务服务时,配置修改jvm调优参数
java -server -XX:PrintFlagsFinal --XX:MetaspaceSize=512M -Xms1024m -Xmx1024m -XX:+UseG1GC -jar xxx.jar