Java 打印所有JVM标志

Java 打印所有JVM标志,java,optimization,printing,jvm,flags,Java,Optimization,Printing,Jvm,Flags,找到一个有趣的JVM标志: java -XX:+UnlockDiagnosticVMOptions -XX:+PrintFlagsFinal -version 它打印了数百种不同的选项,我以前从未听说过。 它还打印默认值,这有助于更好地诊断JVM行为。 另一个有趣的标志是: -XX:+UnlockExperimentalVMOptions 有人知道解释其中每一个的文档吗?我找到的最好的文档是 我曾经创建过一个调试版本。使用此调试构建,您可以运行java-XX:+AggressiveOpts-

找到一个有趣的JVM标志:

java -XX:+UnlockDiagnosticVMOptions -XX:+PrintFlagsFinal -version
它打印了数百种不同的选项,我以前从未听说过。 它还打印默认值,这有助于更好地诊断JVM行为。 另一个有趣的标志是:

-XX:+UnlockExperimentalVMOptions

有人知道解释其中每一个的文档吗?

我找到的最好的文档是

我曾经创建过一个调试版本。使用此调试构建,您可以运行
java-XX:+AggressiveOpts-XX:+UnlockDiagnosticVMOptions-XX:+UnlockExperimentalVMOptions-XX:+PrintFlagsFinal-XX:+PrintFlagsWithComments-version

从包含源代码的目录中,您可以执行(假设您使用的是Linux、Cygwin等):

或者,以下文件(仅查看
*.cpp
*.hpp
文件):

然后查看源文件。可能没有一个文档描述所有选项的最佳原因是,其中一些选项最好留给真正了解JVM的人,最好的方法是熟悉源代码


因此,用(几乎)一句伟大的话来说,
使用源代码

也不要错过Graal JIT选项的
-XX:+JVMCIPrintProperties

在深入研究资源之前,您可以浏览以下摘录并更快地找到合适的选项:

(OracleJDK 6/7/8/9/10/11/12、OpenJDK 8/9/10/11、Graal CE/EE、OpenJ9、Zing)


文档中没有列出命令行的原因是,正如名字所说,它是用来诊断虚拟机的。可以假设人们可能认识他们;)简而言之,这很好地解释了这些选项。根据定义,源代码是程序的完美文档。另请参见@pyrolistic感谢链接;很好的阅读,我不知道杰夫·阿特伍德最近写了一篇关于
阅读源代码的博客。
grep -FR 'UnlockExperimentalVMOptions' hotspot/
find hotspot/ -name '*.[ch]pp' -exec grep -F 'UnlockExperimentalVMOptions' {} +