如何判断VM是在服务器还是客户端模式下运行?

时间:2009-08-21 11:00:27

标签: java

Java热点vpm可以使用-client或-server参数运行。如果两者都没有指定,那么它会根据某些规则选择一个。

在命令行中未指定模式时,是否可以判断正在运行的VM是在客户端还是服务器模式下运行?我在运行过程之外的Windows机器上需要这个。

我意识到这不是一个编程问题,但我希望它没关系,因为它与编程相关。提前谢谢。

4 个答案:

答案 0 :(得分:5)

在Java中,您可以使用以下代码进行检查:

String s = System.getProperty("java.vm.name");
// s = Java HotSpot(TM) Server VM

但这将是高度针对特定供应商的。

从命令行,您可以使用jinfo(用于check a value of a given HotSpot VM option

C:\>"c:\Program Files\Java\jdk1.6.0_16\bin\jps.exe" -l -m
21812 sun.tools.jps.Jps -l -m
19244 (eclipse)

C:\>"c:\Program Files\Java\jdk1.6.0_16\bin\jinfo.exe" -flag NewRatio 19244
-XX:NewRatio=12

自:

  • 实际设置NewRatio Hotpot option
  • 很少见
  • 文档指定:新旧版本的比例。 [x86 -server: 8; x86 -client: 12]

12表示“客户”。

答案 1 :(得分:5)

使用jvisualvm连接到正在运行的Java进程。这将让您看到已使用的JVM参数。

答案 2 :(得分:2)

您可以检索连接到MBean服务器的此信息。如果您运行的是Sun VM,则会有一个名为“java.lang:type = Runtime”的MBean,它公开属性“VmName”,其值与系统属性“java.vm.name”相同。例如,对于服务器vm,值将类似于“Java HotSpot(TM)Server VM”。来自其他供应商的VM可能使用类似的机制。

您可以使用JDK中包含的工具(如jconsole或jvisualvm)连接到MBean服务器,或者如果需要编程访问,则可以使用JMX编写自己的工具。

答案 3 :(得分:0)

如果使用-debug启动jvm,则可以使用jdb连接到它,并使用eval ...

eval System.getProperty("java.vm.name");

那个或jinfo