文章目录
1.概述
Java支持的运行参数包括如下几种:
- 标准参数(-):所有的JVM实现都必须实现这些参数的功能,而且向后兼容;
- 非标准参数(-X):默认jvm实现这些参数的功能,但是并不保证所有jvm实现都满足,且不保证向后兼容;
- 非Stable参数(-XX):此类参数各个jvm实现会有所不同,将来可能会随时取消,需要慎重使用;
2. 标准参数
标准参数又可以分为如下几种:
- 运行模式相关的,如-server,-client,
- 类,jar路径相关的,如-cp,-classpath
- 运行调试相关的,如断言开关(-ea和-da),-verbose系列(-verbose:class,–verbose:gc等)
- 设置系统变量的-D参数。
2.1 运行模式相关的
关于-client 与-server :
JVM工作在Server模式可以大大提高性能,但应用的启动会比client模式慢大概10%。当该参数不指定时,虚拟机启动检测主机是否为服务器,如果是,则以Server模式启动,否则以client模式启动。Client模式启动速度较快,Server模式启动较慢;但是启动进入稳定期长期运行之后Server模式的程序运行速度比Client要快很多。这是因为Server模式启动的JVM采用的是重量级的虚拟机,对程序采用了更多的优化;而Client模式启动的JVM采用的是轻量级的虚拟机。所以Server启动慢,但稳定后速度比Client远远要快。
2.2 类,jar路径相关的
-cp :目录和 zip/jar 文件的类搜索路径
-classpath: 目录和 zip/jar 文件的类搜索路径。 用 : 分隔的目录, JAR 档案
和 ZIP 档案列表, 用于搜索类文件。
2.3 运行调试相关的
(1)verbose
-
-verbose:class
在程序运行的时候究竟会有多少类被加载呢,一个简单程序会加载上百个类的!你可以用verbose:class来监视,在命令行输入java -verbose:class XXX (XXX为程序名)你会在控制台看到加载的类的情况。
verbose和verbose:class含义相同,输出虚拟机装入的类的信息,显示的信息格式如下: [Loaded java.io.FilePermission$1 from shared objects file] 当虚拟机报告类找不到或类冲突时可用此参数来诊断来查看虚拟机从装入类的情况。 -
–verbose:gc
在虚拟机发生内存回收时在输出设备显示信息,格式如下: [Full GC 268K->168K(1984K), 0.0187390 secs] 该参数用来监视虚拟机内存回收的情况。 -
java –verbose:jni
-verbose:jni输出native方法调用的相关情况,一般用于诊断jni调用错误信息。 -
断言
Java断言默认是不启用的.在运行时,是需要显式开启才能生效,否则断言没有任何意义
开启断言:-ea
关闭断言:不指定-ea参数,或是加上-da
另外,断言可以开启局部断言,格式如下:
-ea:<classname> java -ea:MyClass1 打开MyClass1的assertion
-da:<classname> java -da: MyClass1 关闭MyClass1的assertion
-ea:<packagename> java -ea:pkg1 打开pkg1包的assertion
-da:<packagename> java -da:pkg1 关闭pkg1包的assertion
-ea:... java -ea:... 打开缺省包(无名包)的assertion
-da:... java -da:... 关闭缺省包(无名包)的assertion
-ea:<packagename>... java -ea:pkg1... 打开pkg1包和其子包的assertion
-da:<packagename>... java -da:pkg1... 关闭pkg1包和其子包的assertion
-esa java -esa 打开系统类的assertion
-dsa java -dsa 关闭系统类的assertion
当开始断言后,在程序中的如下代码就会生效:
assert <布尔表达式>
assert <布尔表达式> : <错误信息>
2.4 设置系统变量的-D参数
格式:-D<name>=<value>
作用:配置一些环境变量,具体有哪些参数,参数有什么效果,和你用的实际环境、项目架构都有关
示例: