Paket sun.jvmstat: Wie man selbst ein jps schreibt
jps (Java Virtual Machine Process Status Tool) ist ein Utility, welches neu bei Java 5 ist. Es zeigt die aktuellen laufenden Java VM-Instanzen an.
$ jps 2256 2960 Jps$ jps -mlvV 1692 sun.tools.jps.Jps -mlvV -Dapplication.home=C:\Programme\Java\jdk1.6.0 -Xms8m 2256 -Xbootclasspath/a:C:\PROGRA~1\Java\JRE16~1.0\lib\deploy.jar;C:\PROGRA~1\Java\JRE16~1.0\lib\plugin.jar -Xmx96m ...
Um ein eigenes jps zu schreiben ist, ist das Java-Archiv tools.jar aus dem lib-Verzeichnis des JDK im Klassenpfad nötig. Dort gibt es das zentrale (interne!) Paket sun.jvmstat.
import java.util.Set;import sun.jvmstat.monitor.*;public class T{ @SuppressWarnings("unchecked") public static void main( String[] args ) throws Exception { MonitoredHost monitoredhost = MonitoredHost.getMonitoredHost( "//localhost" ); for ( int id : (Set) monitoredhost.activeVms() ) { VmIdentifier vmidentifier = new VmIdentifier( "" + id ); MonitoredVm monitoredvm = monitoredhost.getMonitoredVm( vmidentifier, 0 ); System.out.printf( "%d %s %s %s%n", id, MonitoredVmUtil.mainClass( monitoredvm, true ), MonitoredVmUtil.jvmArgs( monitoredvm ), MonitoredVmUtil.mainArgs( monitoredvm ) ); } }}
Die Ausgabe ist
2984 -Dosgi.requiredJavaVersion=1.5 -Xms40m -Xmx512m -XX:MaxPermSize=256M null 360 T -Dfile.encoding=Cp1252 null 2256 -Xbootclasspath/a:C:\PROGRA~1\Java\JRE16~1.0\lib\deploy.jar;C:\PROGRA~1\Java\JRE16~1.0\lib\plugin.jar -Xmx96m ...
Nützlich kann das ganze sein, um etwa herauszufinden, ob schon ein Exemplar des aktuellen Programms läuft. Denn das zweite Programm findet über mainClass() zweimal die gleiche Klasse.