8.JVM-启动参数

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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值