2009-08-21 18 views
11

Il vpm dell'hotspot Java può essere eseguito con l'argomento -client o -server. Se nessuno dei due è specificato, ne sceglie uno in base ad alcune regole.come sapere se la VM è in esecuzione in modalità server o client?

È possibile determinare se una VM in esecuzione è in esecuzione in modalità client o server quando la modalità non è specificata sulla riga di comando? Ho bisogno di questo su una casella di Windows al di fuori del processo in esecuzione.

Mi rendo conto che questa non è una domanda di programmazione, ma spero che sia ok perché è legata alla programmazione. Grazie in anticipo.

+1

Appena aggiunto jinfo possiblity – VonC

+0

@Hemal quindi il mio uso di 'jinfo', strettamente limitato all'opzione' -flag': funziona – VonC

risposta

4

In Java, potreste controllare questo con questo codice:

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

ma questo sarà altamente specifico fornitore.

Dalla riga di comando, è possibile utilizzare jinfo (utilizzato per 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 

dal:

  • è raro per impostare in realtà il NewRatio Hotpot option e
  • la documentazione specifica: Rapporto tra dimensioni nuove/vecchie generazioni. [x86 -server: 8; x86 -client: 12]

12 significa "Cliente".

+0

Ho bisogno di questo sulla riga di comando, ma sfortunatamente jinfo non supporta questo su Windows, che è dove ho bisogno. –

+1

la stringa di restituzione è specifica del fornitore, ma l'intero problema di Client vs Server VM è specifico del fornitore. – beetstra

+0

@Hemal: se è possibile copiare un JDK6, è possibile chiamare jinfo su Windows – VonC

5

Connessione al processo Java in esecuzione con jvisualvm. Questo ti permetterà di vedere gli argomenti JVM che sono stati usati.

0

Se la JVM viene avviato con -debug, è possibile collegare ad esso utilizzando JDB, e utilizzare eval ...

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

che o jinfo

2

È possibile recuperare tali informazioni collegandosi al MBean server. Se si sta utilizzando una macchina virtuale Sun, si ha un MBean con il nome "java.lang: type = Runtime" che espone l'attributo "VmName", il cui valore è uguale alla proprietà di sistema "java.vm.name". Ad esempio, per un server vm il valore sarà qualcosa come "Java HotSpot (TM) Server VM". Le VM di altri fornitori possono utilizzare un meccanismo simile.

È possibile connettersi al server MBean utilizzando gli strumenti inclusi nel JDK, come jconsole o jvisualvm, o scrivendo il proprio strumento utilizzando JMX se è necessario l'accesso programmatico.

Problemi correlati