Java热点vpm可以使用-client或-server参数运行。如果两者都没有指定,那么它会根据某些规则选择一个。
在命令行中未指定模式时,是否可以判断正在运行的VM是在客户端还是服务器模式下运行?我在运行过程之外的Windows机器上需要这个。
我意识到这不是一个编程问题,但我希望它没关系,因为它与编程相关。提前谢谢。
答案 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
自:
[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)