今天要说的是如何查看 JVM 中已经设置的参数, 包括显示参数和隐式参数.
打印显式参数 -XX:+PrintVMOptions
该参数表示程序运行时, 打印虚拟机接受到的命令行显式参数. 我们用下面的命令运行程序:
java -XX:+UseSerialGC -XX:+PrintVMOptions com.chenshuyi.ClassLoadDemo
输出结果:
- VM option '+UseSerialGC'
- VM option '+PrintVMOptions'
- Hello, I'm chenshuyi
可以看到我们设置了 + UseSerialGC 和 + PrintVMOptions 两个参数, 最后运行时也将这两个参数打印出来了.
打印显式隐式参数 -XX:+PrintCommandLineFlags
该参数打印传递给虚拟机的显式和隐式参数. 我们用下面的命令运行程序:
java -XX:+UseSerialGC -XX:+PrintCommandLineFlags com.chenshuyi.ClassLoadDemo
输出结果:
- -XX:InitialHeapSize=134217728 -XX:MaxHeapSize=2147483648 -XX:+PrintCommandLineFlags -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseSerialGC
- Hello, I'm chenshuyi
可以看到程序不仅输出了我们显式设置的参数, 还将虚拟机默认的参数打印了出来, 包括初始堆大小 (134217728), 最大堆大小(2147483648) 等.
打印所有系统参数 -XX:+PrintFlagsFinal
该参数会打印所有的系统参数的值. 我们用下面的命令运行程序:
java -XX:+UseSerialGC -XX:+PrintFlagsFinal com.chenshuyi.ClassLoadDemo> jvm_flag_final.txt
之后打开 jvm_flag_final.txt 文件, 可以看到有 800 多行, 这是因为程序将虚拟机的所有参数都打印了出来. 下面列几个我们常用的参数看看就可以:
- ...
- uintx InitialHeapSize := 134217728 {
- product
- }
- ...
- uintx MaxMetaspaceSize = 18446744073709547520 {
- product
- }
- ...
- uintx MetaspaceSize = 21807104 {
- pd product
- }
从上面我们列出的部分参数可以看到, 上面三个参数分别是设置初始堆大小, 元空间最大大小, 初始元空间大小.
最后, 让我们来总结一下, 加强记忆.
-XX:+PrintVMOptions 程序运行时, 打印虚拟机接受到的命令行显式参数.
-XX:+PrintCommandLineFlags 打印传递给虚拟机的显式和隐式参数.
-XX:+PrintFlagsFinal 打印所有的系统参数的值
来源: https://www.cnblogs.com/chanshuyi/p/jvm_serial_12_jvm_param_jvm_param.html