1. 参数类型
-
标准参数
以-
开头为标准参数,所有的 JVM 都要实现这些参数,并且向后兼容 -
非标准参数
以-X
开头为非标准参数, 基本都是传给 JVM 的,默认 JVM 实现这些参数的功能,但是并不保证所有 JVM 实现都满足,且不保证向后兼容 -
非稳定参数
以-XX:
开头为非稳定参数, 专门用于控制 JVM 的行为,跟具体的 JVM 实现有关,随时可能会在下个版本取消 -
Boolean参数
-XX:+-Flags
形式, ± 是对布尔值进行开关 -
选项值参数
-XX:key=value
形式, 指定某个选项的值
$ java
用法: java [-options] class [args...]
(执行类)
或 java [-options] -jar jarfile [args...]
(执行 jar 文件)
其中选项包括:
-d32 使用 32 位数据模型 (如果可用)
-d64 使用 64 位数据模型 (如果可用)
-server 选择 "server" VM
默认 VM 是 server,
因为您是在服务器类计算机上运行。
-cp <目录和 zip/jar 文件的类搜索路径>
-classpath <目录和 zip/jar 文件的类搜索路径>
用 : 分隔的目录, JAR 档案
和 ZIP 档案列表, 用于搜索类文件。
-D<名称>=<值>
设置系统属性
-verbose:[class|gc|jni]
启用详细输出
-version 输出产品版本并退出
-version:<值>
警告: 此功能已过时, 将在
未来发行版中删除。
需要指定的版本才能运行
-showversion 输出产品版本并继续
-jre-restrict-search | -no-jre-restrict-search
警告: 此功能已过时, 将在
未来发行版中删除。
在版本搜索中包括/排除用户专用 JRE
-? -help 输出此帮助消息
-X 输出非标准选项的帮助
-ea[:<packagename>...|:<classname>]
-enableassertions[:<packagename>...|:<classname>]
按指定的粒度启用断言
-da[:<packagename>...|:<classname>]
-disableassertions[:<packagename>...|:<classname>]
禁用具有指定粒度的断言
-esa | -enablesystemassertions
启用系统断言
-dsa | -disablesystemassertions
禁用系统断言
-agentlib:<libname>[=<选项>]
加载本机代理库 <libname>, 例如 -agentlib:hprof
另请参阅 -agentlib:jdwp=help 和 -agentlib:hprof=help
-agentpath:<pathname>[=<选项>]
按完整路径名加载本机代理库
-javaagent:<jarpath>[=<选项>]
加载 Java 编程语言代理, 请参阅 java.lang.instrument
-splash:<imagepath>
使用指定的图像显示启动屏幕
有关详细信息, 请参阅 http://www.oracle.com/technetwork/java/javase/documentation/index.html。
2. 常用配置
2.1. JVM 运行模式
JVM 有两种运行模式:
-server
使用 server 模式,特点是启动速度比较慢,但运行时性能和内存管理效率很高,适用于生产环境
在具有 64 位能力的 jdk 环境下将默认启用该模式,而忽略 -client 参数
-client
使用 client 模式,特点是启动速度比较快,但运行时性能和内存管理效率不高,通常用于客户端应用程序或者PC应用开发和调试
JDK1.7 之前在 32 位的 x86 机器上的默认值是 -client 选项
2.2. JVM 对字节码的处理
-Xint
在解释模式(interpreted mode)下,-Xint 标记会强制 JVM 解释执行所有的字节码,这当然会降低运行速度,通常低 10 倍或更多-Xcomp
JVM 在第一次使用时会把所有的字节码编译成本地代码,从而带来最大程度的优化-Xmixed
混合模式,将解释模式和变异模式进行混合使用,由 JVM 自己决定,这是 JVM 的默认模式,也是推荐模式
我们使用 java -version 可以看到 mixed mode 等信息
热点代码探测到热点代码进行编译
2.4. 堆内存设置
-
-Xmx
指定最大堆内存。 如 -Xmx4g. 这只是限制了 Heap 部分的最大值为 4g。这个内存不包括栈内存,也不包括堆外使用的内存。 -
-Xms
指定堆内存空间的初始大小。 如 -Xms4g。而且指定的内存大小,并不是操作系统实际分配的初始值,而是 GC 先规划好,用到才分配 专用服务器上需要保持-Xms和-Xmx一致,否则应用刚启动可能就有好几个 FullGC。当两者配置不一致时,堆内存扩容可能会导致性能抖动 -
-Xmn
等价于 -XX:NewSize,使用 G1 垃圾收集器 不应该 设置该选项,在其他的某些业务场景下可以设置。官方建议设置为 -Xmx 的 1/2 ~ 1/4 -
-XX:MaxDirectMemorySize=size
系统可以使用的最大堆外内存,这个参数跟-Dsun.nio.MaxDirectMemorySize效果相同
2.5. 线程配置
-Xss
设置每个线程栈的字节数。 例如 -Xss1m 指定线程栈为 1MB,与-XX:ThreadStackSize=1m等价
2.6. 垃圾收集器设置
-XX:+UseG1GC
使用 G1 垃圾回收器-XX:+UseConcMarkSweepGC
使用 CMS 垃圾回收器-XX:+UseSerialGC
使用串行垃圾回收器-XX:+UseParallelGC
使用并行垃圾回收器
2.7. Agent 相关的选项
Agent 是 JVM 中的一项黑科技, 可以通过无侵入方式来做很多事情,比如注入 AOP 代码,执行统计等等,权限非常大
--agentlib
libname[=options] 启用native方式的agent, 参考 LD_LIBRARY_PATH 路径-agentpath:pathname[=options]
启用native方式的agent。-javaagent:jarpath[=options]
启用外部的agent库, 比如 pinpoint.jar 等等-Xnoagent
禁用所有 agent