JVM参数调优
1、JVM的标配参数和X参数
JVM的参数类型:
标配参数 | java -version | java -help | -后不能由空格 |
---|---|---|---|
X参数(了解) | -Xint():解释执行 | -Xcomp :第一次使用就编译成本地代码 | -Xmixed:混合模式 |
XX参数 | 下文再讲: |
2、XX类型参数之布尔类型:
公式:-XX:+ 或者 - 某个属性值
(+表示开启,-表示关闭)
如何查看一个正在运行中的java程序,它的某个jvm参数是否开启?具体值是多少?
- jps -l (类似于Linux中的ps - ef | grep java)查看一个正在运行中的java程序,得到Java程序号。
- jinfo -flag PrintGCDetails (Java程序号 )查看它的某个jvm参数(如PrintGCDetails )是否开启。
- jinfo -flags (Java程序号 )查看它的所有jvm参数
例如:
是否打印GC收集细节
- -XX:-PrintGCDetails
- -XX:+PrintGCDetails
是否使用串行垃圾回收器(默认回收器)
- -XX:-UseSerialGC
- -XX:+UserSerialGC
4、JVM的XX参数之设值类型
公式:-XX:属性key=属性值value
例如:
- -XX:MetaspaceSize=128m
- -XX:MaxTenuringThreshold=15
两个经典参数:
- -Xms等价于-XX:InitialHeapSize,初始大小内存,默认物理内存1/64
- -Xmx等价于-XX:MaxHeapSize,最大分配内存,默认为物理内存1/4
5、JVM之家底查看:
查看初始默认参数值
-XX:+PrintFlagsInitial
公式:java -XX:+PrintFlagsInitial
查看修改更新参数值
-XX:+PrintFlagsFinal
公式:java -XX:+PrintFlagsFinal
例如控制台打印:
uintx InitialCodeCacheSize = 2555904 {pd product} {default}
size_t InitialHeapSize := 268435456 {product} {ergonomic}
=表示默认,:=表示修改过的。
PrintFlagsFinal举例,运行java命令的同时打印出参数
java -XX:+PrintFlagsFinal -XX:MetaspaceSize=512m HelloWorld
size_t MetaspaceSize := 536870912 {pd product} {default}
打印命令行参数
-XX:+PrintCommandLineFlags
打印GC收集日志信息
-XX:+PrintGCDetails
6、JVM常用调优参数
-
设置单个线程栈内存的大小,一般默认为512k~1024K
等价于
-XX:ThreadStackSize
-XX:ThreadStackSize=1m
-XX:ThreadStackSize=1024k
-XX:ThreadStackSize=1048576
-
设置元空间(MetaspaceSize)参数
-XX:MetaspaceSize
设置元空间大小 -
设置堆空间内存大小的参数
-Xmx:最大堆大小
-Xms:初始堆大小
-Xmn: 年轻代大小
-XXSurvivorRatio:年轻代中Eden区与Survivor区的大小比值
调节新生代中 eden 和 S0、S1的空间比例,默认为
-XX:SuriviorRatio=8,Eden:S0:S1 = 8:1:1
假如设置成 -XX:SurvivorRatio=4,则为 Eden:S0:S1 = 4:1:1
SurvivorRatio值就是设置eden区的比例占多少,S0和S1相同。
- 配置新生代跟老年代的比例:
-XX:NewRatio=4
:新生代占1,老年代占4,年轻代占整个堆的 1/5,
- 配置晋升老年代的对象年龄:
-XX:MaxTenuringThreshold=1:设置垃圾最大年龄。默认为15。