2009-08-21 211 views
11

Java热点vpm可以使用-client或-server参数运行。如果没有指定,则根据一些规则选择一个。如何判断虚拟机是在服务器还是客户端模式下运行?

是否可以告诉一个正在运行的虚拟机是否在客户端或服务器模式下运行时在命令行中没有指定模式?我需要在正在运行的进程之外的Windows盒子上使用它。

我知道这不是一个编程问题,但我希望它是好的,因为它是编程有关。提前致谢。

+1

刚刚添加jinfo possiblelity – VonC 2009-08-21 11:35:52

+0

@Hemal因此,我使用'jinfo',严格限制为'-flag'选项:它的工作 – VonC 2009-08-21 12:49:15

回答

4

在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表示“客户”。

+0

我确实需要在命令行上使用此命令,但不幸的是jinfo不支持在Windows上支持此操作,这是我需要它的地方。 – 2009-08-21 11:17:15

+1

返回字符串是供应商特定的,但整个Client vs Server VM问题也是供应商特定的。 – beetstra 2009-08-21 11:26:15

+0

@Hemal:如果你可以复制JDK6,你可以叫金佛山在Windows – VonC 2009-08-21 12:40:45

5

连接到与jvisualvm正在运行的Java进程。这会让你看到已经使用的JVM参数。

0

如果JVM启动与-debug,您可以使用JDB连接到它,并使用eval ...

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

即或jinfo

2

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

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

相关问题