# 查看运行时 JVM 参数
-XX:+PrintFlagsInitial
:查看初始值-XX:+PrintFlagsFinal
:查看最终的值一般都有一个默认值,可以通过命令行等配置方式覆盖掉这个默认值,这里查看的则是这个最终的值
-XX:+UnlockExperimentaIVMOptions
:解锁实验参数JVM 中有一部分参数是无法直接赋值的,需要加该参数,解锁实验参数,才能配置
-XX:UnlockDiagnosticVMOpeions
:解锁诊断参数-XX:+PrintCommandLineFlags
:打印命令行参数
# PrintFlagsFinal
mrcode:~ mrcode$ 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}
1
2
3
4
5
6
7
2
3
4
5
6
7
注:=
表示默认值,:=
表示被用户或则 JVM 修改后的值
这个命令查看的是当前运行这个命令的进程 java -XX:+PrintFlagsInitial -version
的值,运行这一条,也会去启动一个 java 进程,那么打印的参数则是这个进程的参数。如何查看一个正在运行的 JVM 进程参数,是后面课程要讲解的。
# jps
jps 是专门用来查看 Java 进程的工具。
mrcode:~ mrcode$ jps -help
usage: jps [-help]
jps [-q] [-mlvV] [<hostid>]
Definitions:
<hostid>: <hostname>[:<port>]
1
2
3
4
5
6
2
3
4
5
6
# 查看当前的 java 进程,左侧是进程 ID,右侧是名称
mrcode:~ mrcode$ jps
35984 Launcher
39312
45777 Jps
478
2255
# -l:显示完整的名称,显示应用程序main类的完整程序包名称或应用程序JAR文件的完整路径名
mrcode:~ mrcode$ jps -l
35984 org.jetbrains.jps.cmdline.Launcher
39312
45778 sun.tools.jps.Jps
478
2255
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
这些参数的含义在 JDK 官方文档上有,名字叫 Java平台,标准版工具参考 (opens new window)
比如这里的 jps 工具 (opens new window)
# jinfo
查看正在运行的 JVM 进程信息
mrcode:~ mrcode$ jinfo --help
Usage:
jinfo [option] <pid>
(to connect to running process)
jinfo [option] <executable <core>
(to connect to a core file)
jinfo [option] [server_id@]<remote server IP or hostname>
(to connect to remote debug server)
where <option> is one of:
-flag <name> to print the value of the named VM flag
-flag [+|-]<name> to enable or disable the named VM flag
-flag <name>=<value> to set the named VM flag to the given value
-flags to print VM flags
-sysprops to print Java system properties
<no option> to print both of the above
-h | -help to print this help message
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
比如,查看其中某一个 JVM 进程的最大堆内存
# 这里查询的是我本机上 idea 的最大对内存
mrcode:~ mrcode$ jinfo -flag MaxHeapSize 35984
-XX:MaxHeapSize=734003200
# 这里的单位是 byte,也就是 725MB
1
2
3
4
2
3
4
-flags
查看非 JVM 默认参数信息
# 这里查看的是一个 spring cloud 的一个网关程序
[root] # jinfo -flags 12299
Attaching to process ID 12299, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.111-b14
# 不是 JVM 默认参数,被修改过
Non-default VM flags: -XX:CICompilerCount=3 -XX:InitialHeapSize=62914560 -XX:MaxHeapSize=1048576000 -XX:MaxNewSize=349175808 -XX:MinHeapDeltaBytes=524288 -XX:NewSize=20971520 -XX:OldSize=41943040 -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseFastUnorderedTimeStamps -XX:+UseParallelGC
# 这里是前几天我通过命令行运行程序的时候加上的 java -Xmx1000m -jar xxx
Command line: -Xmx1000m
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
查看垃圾回收器
[root] # jinfo -flag UseConcMarkSweepGC 12299
-XX:-UseConcMarkSweepGC
[root] # jinfo -flag UseG1GC 12299
-XX:-UseG1GC
[root] # jinfo -flag UseParallelGC 12299
-XX:+UseParallelGC
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
← JVM 参数类型 查看 JVM 统计信息 →