我该如何知道Sun JVM启用了哪些默认设置?

32

我想在我的JVM上尝试使用CompressedOops。现在我想知道它是否默认启用。我在Debian/Squeeze上运行此JVM:

$ java -version
java version "1.6.0_22"
Java(TM) SE Runtime Environment (build 1.6.0_22-b04)
Java HotSpot(TM) 64-Bit Server VM (build 17.1-b03, mixed mode)

有些人说它是默认启用的,有些人说不是:

来源:http://forums.yourkit.com/viewtopic.php?f=3&t=3185

是的,你是对的,我也检查了一下, Compressed Oops在Java6u21 64位中不是默认激活的, 我不明白为什么在我提供的链接中会这样说。

我尝试使用jconsole/JMX进行检查,但没有找到名为CompressedOops或类似的属性。

有人知道在特定版本中获取所有jvm选项及其默认值的列表吗?

问候 Janning


相关内容:https://dev59.com/XHI-5IYBdhLWcg3wZ3UR - skaffman
我90%确定默认情况下未启用。不过这并不意味着你应该被说服 :) - skaffman
1个回答

71

您可以使用-XX:+PrintFlagsFinal运行JVM以打印所有标志的值。

或者,您可以使用jinfo工具在运行中的JVM中检查标志的值:

> jinfo -flag UseCompressedOops 7364
-XX:+UseCompressedOops

使用jps命令查找进程的pid。


这是一个很好的答案。但对我来说,在Debian Squeeze上它并没有按预期工作:无法打开套接字文件:目标进程未响应或HotSpot VM未加载。如果我只使用“jinfo <pid>”调用它,它会向我显示一长串值,但在这个视图中,我看不到是否设置了CompressOops。 - Janning Vygen
3
jinfo还可以用于动态开启/关闭标志,例如,如果标志可管理,则可以使用jinfo -flag +HeapDumpOnOutOfMemoryError <pid>jinfo是一个非常有用但鲜为人知的工具。 - Jarek Przygódzki
这个选项非常有用:-XX:+PrintFlagsFinal - hao

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接