2009-08-21 207 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服務器。

相關問題