如何使用和查找JVM选项
Java程序启动方式
-
执行类:java [-options] class [args...]
-
执行 jar 文件: java [-options] -jar jarfile [args...]
options指JVM选项,比如堆内存大小;args指程序接收的参数,也就是public static void main(String[] args) 中的args。
class指启动类文件(.class)的路径,jarfile指启动的jar包路径。
JVM选项分类
前缀 | 类型 | 特点 |
---|---|---|
- | 标准 | 所有JVM实现都支持 |
-X | 非标准 | 不能保证被所有的 JVM实现都支持,变更不另行通知 |
-XX | 不稳定 | 不能保证被所有的 JVM实现都支持,变更不另行通知 |
标准选项
java -help 可以看到所有的标准选项帮助信息,部分结果如下:
其中利用设置系统属性(-D<名称>=<值>)可以用来给Springboot项目jar启动命令中加入一些属性覆盖项目中的配置。
非标准选项
**java -X **可以看到所有非标准选项帮助信息,部分结果如下:
不稳定选项
不稳定选项暂时没发现有特定的命令查找出来,但是可以根据文后的查找指令看到相关的结果,也可以去文末尾的参考链接查看。它们的格式如<前缀>:<选项>。
如何指定选项的值?
标准选项(-)和非标准选项(-X)根据帮助信息给出的格式写就可以了。
非标准选项有点特殊,如果选项类型是布尔类型(bool)则用+表示使用(true),用-表示不使用(false),写在选项名前面,比如使用G1垃圾收集器(-XX:+UseG1GC);如果是其他类型一般在选项后加=并指定值,比如设置元空间大小为128兆(-XX:MetaspaceSize=128m)。
如何查看选项的值?
有三个非标选项可以让java命令打印出当前语句的选项信息(类型 | 选项名 | 值 | 适用类型)
选项 | 作用 |
---|---|
-XX:+PrintFlagsInitial | 打印所有选项的默认值 |
-XX:+PrintFlagsFinal | 打印所有选项的最终值,执行这条指令时,所有选项的值 |
-XX:+PrintCommandLineFlags | 打印有变动的选项值,默认值和最终值有差异的选项 |
比如执行java -version指令查看JVM版本,同时指定打印所有JVM选项的最终值:
java -XX:+PrintFlagsFinal -version
还可以通过grep对查询结果进行筛选,比如:
java -XX:+PrintFlagsFinal -version | grep G1
统计选项个数
通过wc <选项(-c字节数,-l行数,-w字数)>,统计行数就可以知道有多少个选项。
java -XX:+PrintFlagsFinal -version | wc -l
选项适用类型
类型 | 含义 |
---|---|
product | 官方支持, JVM内部选项 |
rw | 可动态写入的 |
C1 | Client JIT(Just In Time) 客户端类型的JVM及时编译器 |
C2 | Server JIT(Just In Time) 服务器类型的JVM及时编译器 |
pd | Platform Dependent 平台独立 |
lp64 | 仅 64 位JVM |
manageable | 外部定义的并且是可动态写入的 |
diagnostic | 用于虚拟机debug的 |
experimental | 非官方支持的 |