JVM 参数类型
JVM的参数类型分为 3 大类:
- 标准参数
- X 参数:非标准化参数
- XX 参数:非标准化参数,主要用于 JVM 调优和 Debug
标准参数
在 JVM 各个版本中基本上不变,相对稳定
- -help
- -server -client
- -version -showversion
- -cp -classpath
X 参数
```shell默认是使用 mixed 模式
$ java -version Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8 java version “1.8.0_45” Java(TM) SE Runtime Environment (build 1.8.0_45-b15) Java HotSpot(TM) 64-Bit Server VM (build 25.45-b02, mixed mode)
指定使用 -Xcomp ,输出的是:compiled mode
$ java -Xcomp -version Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8 java version “1.8.0_45” Java(TM) SE Runtime Environment (build 1.8.0_45-b15) Java HotSpot(TM) 64-Bit Server VM (build 25.45-b02, compiled mode)
指定使用 -Xint 看到输出的是:interpreted mode
$ java -Xint -version Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8 java version “1.8.0_45” Java(TM) SE Runtime Environment (build 1.8.0_45-b15) Java HotSpot(TM) 64-Bit Server VM (build 25.45-b02, interpreted mode)
<a name="JhzwX"></a>
### XX 参数
非标准化参数、相对不稳定、主要用于 JVM 调优和 Debug
- Boolean 类型
格式:-XX:[+-]<name> 表示启用或禁用 name 属性,+ 号表示启用<br />例如:
```shell
-XX:+UseConcMarkSweepGC
-XX:+UseG1GC
- 非 Boolean 类型
格式:-XX:<name>=<value>
表示 name 属性的值是 value
例如:
-XX:MaxGCPauseMillis=500
XX:GCTimeRatio=19
但是有缩写版本的参数,看上去很像是 X 参数,其实是 XX 参数。比如
- -Xmx :最大堆内存 对应的 XX 参数是
-XX:InitialHeapSize
-Xms:初始化堆大小 对应的 XX 参数是
-XX:MaxHeapSize
查看运行时 JVM 参数
-XX:+PrintFlagsInitial
:查看初始值-XX:+PrintFlagsFinal
:查看最终的值一般都有一个默认值,可以通过命令行等配置方式覆盖掉这个默认值,这里查看的则是这个最终的值-XX:+UnlockExperimentaIVMOptions
:解锁实验参数
JVM 中有一部分参数是无法直接赋值的,需要加该参数,解锁实验参数,才能配置
-XX:UnlockDiagnosticVMOpeions
:解锁诊断参数-XX:+PrintCommandLineFlags
:打印命令行参数
$ java -XX:+PrintFlagsInitial -version
[Global flags]
intx ActiveProcessorCount = -1 uintx
MaxHeapSize := 4294967296 {product}
bool UseThreadPriorities = true {pd product}
bool UseTypeProfile = true {product}
bool UseTypeSpeculation = true {C2 product}
:::info
注:
= 表示默认值
:= 表示被用户或则 JVM 修改后的值
这个命令查看的是当前运行这个命令的进程java -XX:+PrintFlagsInitial -version
的值,运行这一条,也会去启动一个 java 进程,那么打印的参数则是这个进程的参数。
如何查看一个正在运行的 JVM 进程参数,是后面课程要讲解的。
:::