启动Jar包时,如何查看JVM的默认参数及隐藏参数
Hey there! Let's break down your questions about JVM default and hidden parameters clearly:
如何查看JVM的默认参数
有几个实用命令可以帮你快速获取JVM的默认配置:
- 查看最终生效的所有参数(包含默认值+你显式指定的参数):
运行命令java -XX:+PrintFlagsFinal -version。输出会列出所有JVM参数的最终值,比如堆内存大小、垃圾收集器类型等。你会看到参数值前的标记:=表示是默认值,:=表示被手动指定或JVM自动调整过的值。 - 查看初始默认参数(排除手动指定的调整):
使用java -XX:+PrintFlagsInitial -version,这个命令会展示JVM启动时的初始默认设置,不过部分参数可能在启动过程中被JVM根据系统环境自动调整。 - 快速查看核心配置:
如果你只需要看堆、栈、元空间这些关键默认值,java -XshowSettings:all -version更友好,输出简洁易懂,适合快速排查基础配置。
关于JVM的"隐藏参数"
答案是肯定的——除了我们日常显式指定的参数(比如 -XX:MaxPermSize=256m 或 -Xmx1g),确实存在大量未完全文档化的隐藏参数,大多以 -XX: 开头,主要用于JVM调试、特定场景优化或者内部测试。
如何查找这些隐藏参数:
- 用PrintFlagsFinal命令全量输出:
前面提到的java -XX:+PrintFlagsFinal -version其实已经包含了所有隐藏参数,不管有没有官方文档。你可以把输出重定向到文件慢慢分析:java -XX:+PrintFlagsFinal -version > jvm_all_flags.txt。 - 解锁实验性参数:
有些更底层的实验性隐藏参数需要先解锁才能看到,加上-XX:+UnlockExperimentalVMOptions参数即可:java -XX:+UnlockExperimentalVMOptions -XX:+PrintFlagsFinal -version。这类参数通常是JVM团队正在测试的功能,生产环境使用要格外谨慎。 - 查看JVM源码:
如果你想深入了解某个隐藏参数的作用,OpenJDK的源码是最权威的参考。比如在src/hotspot/share/runtime/arguments.cpp文件中,能找到大部分参数的定义、默认值和生效逻辑——当然,这需要你有一定的C++基础。
⚠️ 注意:隐藏参数没有官方支持,不同JVM厂商(Oracle JDK、OpenJDK、Azul Zulu等)或版本之间可能存在差异,甚至在版本迭代中被移除或修改。生产环境使用前一定要充分测试!
内容的提问来源于stack exchange,提问作者Tony
相关产品推荐
相关产品推荐

