尽管我们已经为我们的应用程序明确设置了许多 JVM 标志,但很难知道: 1. 默认情况下,布尔标志已经打开(默认值在 JDK/JRE 次要更新之间更改) 2. 一个标志否定其他 3。给定任意标志的默认值在您的特定系统上是什么(由 Java 人体工程学设置)
总结一下:有没有类似的命令行工具
java -XX:+PrintFlagsFinal
,我可以在哪里检查已经运行的 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;
}
}
您正在寻找jinfo。它允许您从命令行查看和设置 JVM 标志。它是用于 JVM的众多广为人知的工具和实用程序之一。
此技术适用于任何本地或远程运行的 java 应用程序。
jvisualvm 可以在自 JDK 6 Update 7 以来的任何 JDK 中找到。关于 jvisualvm 的视频教程在这里。