之前一直对jvm参数都是现学现用,对有些地方没有总结,比如-XX 和 -X有什么区别,无意中看到oracle的官网对于jvm参数的介绍,下面做个简单的总结和翻译。
首先献上oracle官方链接:
- http://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html
- https://docs.oracle.com/javase/8/docs/technotes/tools/unix/java.html
1 jvm参数类型
1.1 标准参数(保证在所有的jvm上都实现)
不是以-X和-XX开头的参数属于标准参数,例如-Dproperty=value -jar filename -client 等
1.2 非标准参数(不保证在所有的jvm上都实现)
非标准参数分为以-X开头的和以-XX开头的
- 以-X开头的参数是非标准参数,有可能不在release note中通知就改变
- 以-XX开头的参数是不稳定的,可能不通知就改变
非标准参数
- 对于boolean类型,-XX:+<选项> 表示打开选项;--XX:-<选项> 表示关闭掉选项
- 对于数值类型,可用-XX:<选项>=<值> 表示;值默认单位是字节,也可用单位有‘k’或者‘K’、‘m’或者‘M’、‘g’或者‘G’,例如32k表示32768
- 对于String类型,可用-XX:<选项>=<值>,通常用来指定一个文件、路径或者命令
对于一些参数的默认值可用参考上面列出的oracle的官网
2 常用参数
参数 | 说明 | 备注 |
---|---|---|
-Dproperty=value | 设置系统变量,等号两边没有空格,如果value有空格的话,需要用双 引号括起来 | |
-X | 显示所有的-X 选项 | |
-Xmssize | 设置堆的最小值 | 值必须是1024的倍数并且大于1M |
-Xmxsize | 设置堆最大值 | 值必须值1024的倍数并且大于2M,一般情况下-Xmx和-Xms设置为一样大的值,和-XX:MaxHeapSize=size 意义相同 |
-Xxssize | 设置线程栈大小 | 默认值和jvm所在的平台有关系,该选项和-XX:ThreadStackSize 意义相同 |
-XX:NewRatio=ratio | 设置新生代和老年代的比例,默认大小比例是2 | |
-Xmnsize | 设置年轻代大小,最大值和最小值都是size | 值默认单位是字节,也可用单位有‘k’或者‘K’、‘m’或者‘M’、‘g’或者‘G’ 例如-Xmn256m |
-XX:NewSize=size | 设置新生代初始大小 | |
-XX:MaxNewSize=size | 设置新生代最大值 |
3 其他
-Xmnsize、-XX:NewRatio=ratio、-XX:NewSize=size/-XX:MaxNewSize=size 三个参数都会影响年轻代的大小,那么在混合使用的情况下,优先级是什么呢?
- 最高优先级 -XX:NewSize=size/-XX:MaxNewSize=size
- 中优先级:-Xmnsize(-Xmnsize 等效 -XX:NewSize=size -XX:MaxNewSize=size)
- 低优先级: -XX:NewRatio=ratio
推荐使用-Xmnsize参数,原因是这个参数简洁,相当于一次设定-XX:NewSize=size/-XX:MaxNewSize=size,而且两者相等,适用于生产环境。-Xmnsize 配合 -Xmssize/-Xmxsize,即可将堆内存布局完成
4 参考
http://www.jiucaiyuan.net/m/?post=56
http://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html
https://docs.oracle.com/javase/8/docs/technotes/tools/unix/java.html