JVM配置参数的类型

参数名称的说明

JVM配置参数分别用于跟踪监控JVM状态,分配堆内存以及分配栈内存。按照类型分为三类标准参数、非标准参数和非稳定参数

标准参数(-)

所有 JVM 都必须支持这些参数的功能, 而且向后兼容, 如:

  • -client : 设置 JVM 使用 client 模式, 特点是启动速度比较快, 但运行时性能和内存管理效率不高. 通常用于客户端应用程序或开发调试; 在32位环境下直接运行 Java 程序默认启用该模式.

  • -server : 设置 JVM 使 server 模式, 特点是启动速度比较慢, 但运行时性能和内存管理效率很高, 适用于生产环境; 在具有64位能力的JDK环境下默认启用该模式.

1
2
3
4
5
6

Sam-Mac:hexo-blog Sam$ java -version
java version "1.8.0_74"
Java(TM) SE Runtime Environment (build 1.8.0_74-b02)
Java HotSpot(TM) 64-Bit Server VM (build 25.74-b02, mixed mode)
Sam-Mac:hexo-blog Sam$
非标准参数(-X)

各 JVM 厂商应该都实现这些参数的功能, 但是并不保证所有的 JVM 实现都满足, 且不保证向后兼容。这些用的不多,看看就好。

1
2
3
4
5
6
7
8
// 解释执行
-Xint

// 第一次使用就编译成本地代码
-Xcomp

// 混合模式
-Xmixed
非稳定参数(-XX)

此类参数各个JVM实现会有所不同, 将来可能会不被支持, 需要慎重使用。这种类型的参数自己又可分为两种,分别如下:

  • 布尔类型。 -XX:+ 或者 - 某个属性值,+ 表示开启,-表示关闭。例如:

    1
    2
    3
    4
    5
    // 打印GC详细信息
    -XX:+PrintGCDetails

    // 不打印GC详细信息
    -XX:-PrintGCDetails
  • KV类型。-XX:属性key=属性值value,例如:

1
2
// 设置Metaspace的大小
-XX:MetaspaceSize=1024m

注意: 在”-XX:”后的参数若不需要赋值, 即只是用来配置开启或关闭相应选项, 则需要有 “+” (开启) 或 “-“ (禁止) , 否则应用程序将在日志文件 (如 Tomcat 的日志文件 catalina.out ) 中抛出如下错误:

1
2
3
Missing +/- setting for VM option 'UseConcMarkSweepGC'. 
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.

可以看出, 这里缺少了 “+/-“ 符号, 导致虚拟机启动异常, 修改后即可正常启动.

我们常设置的JVM参数Xms和Xmx,属于哪种类型的JVM参数?-Xms等价于-XX:InitialHeapSize,-Xmx等价于-XX:MaxHeapSize,所以他们都是XX类型参数。

  • 作者: Sam
  • 发布时间: 2020-02-06 15:55:13
  • 最后更新: 2020-02-06 15:57:04
  • 文章链接: https://ydstudios.gitee.io/post/ea8be9c5.html
  • 版权声明: 本网所有文章除特别声明外, 禁止未经授权转载,违者依法追究相关法律责任!