尽管我们已经为应用程序显式设置了许多 JVM 标志,但很难知道是否: 1. 布尔标志已默认打开(默认值在次要 JDK/JRE 更新之间发生了变化) 2. 一个标志否定了其他标志 3.特定系统上给定任意标志的默认值是什么(由 Java 人体工程学设置)
总结一下:有没有类似的命令行工具
java -XX:+PrintFlagsFinal
Run Code Online (Sandbox Code Playgroud)
,我可以在哪里检查已运行的 JVM 的所有标志值?
对于 HotSpot,您可以使用(来自 ehcache)
private static String getHotSpotVmOptionValue(String name) {
try {
MBeanServer server = ManagementFactory.getPlatformMBeanServer();
ObjectName beanName = ObjectName.getInstance("com.sun.management:type=HotSpotDiagnostic");
Object vmOption = server.invoke(beanName, "getVMOption", new Object[] {name}, new String[] {"java.lang.String"});
return (String)((CompositeData)vmOption).get("value");
} catch (Throwable t) {
return null;
}
}
Run Code Online (Sandbox Code Playgroud)