07.04.01 java/javaw – Programme ausführen
Sie kennen bereits den Befehl java um eine kompilierte Class-Datei mit Main-Methode auszuführen. Auch wissen Sie schon, wie Sie den Classpath beim Ausführen eines Programms setzen. In diesem Kapitel lernen Sie weitere Parameter und das Programm javaw (welches nicht auf allen Plattformen zur Verfügung steht) kennen.
Bevor wir uns den Parametern widmen, werfen wir zuerst einen Blick auf das Programm javaw. Dieses kleine Tool finden Sie – sofern unterstützt – ebenso wie java im bin-Verzeichnis Ihrer JRE.
Unter Windows wäre dies z. B. C:\Programme\Java\jre6\bin\java.exe bzw. C:\Programme\Java\jre6\bin\javaw.exe.
Im Prinzip ist der javaw-Aufruf der java-Aufruf ohne Konsole und eignet sich folglich für Hintergrundprozesse oder grafische Programme. Sie können also mit „javaw“ genauso Java-Programme starten wie mit „java“. Der Unterschied liegt darin, dass Sie die Konsole nach Aufruf von „javaw“ wieder schließen können, ohne das Programm zu beenden. Schließen Sie die Konsole nach einem „java“ Aufruf, wird Ihr Programm auch gleichzeitig mit beendet. Da „javaw“ auf die Konsole verzichten kann, werden auch keine System.out.println
oder System.err.println
ausgegeben.
Bei jedem Aufruf von „java“ oder „javaw“ wird eine neue Java VirtualMachine (JVM) gestartet, die für die Ausführung Ihres Java-Programms zuständig ist.
Java HotSpot VM
In diesem Kapitel werden Sie oft etwas von „Kompilieren“ und „Java HotSpot VM“ oder ähnlichem lesen. Hiermit ist aber nicht das standardmäßige Kompilieren von Java-Quellcode in Java-Bytecode gemeint, weshalb ich Ihnen zuerst kurz und knackig erkläre, was es damit auf sich hat:
Bei der Standard-VirtualMachine, die für die Ausführung Ihrer Programme und Klassen zuständig ist, ist eine so genannte „Java HotSpot VM“ integriert. Diese kompiliert den Byte-Code zur Laufzeit in Maschinencode und sorgt damit für einen Geschwindigkeitsschub. Wenn in diesem Kapitel also vom Kompilieren geredet wird, ist damit das Kompilieren von Byte-Code in Maschinencode gemeint.
Parameter/Optionen
Verschaffen wir uns nun einen groben Überblick (die wichtigeren Optionen werden auch detaillierter besprochen), über die verfügbaren Standard-Optionen.
Beachten Sie, dass alle Optionen zwischen dem Wörtchen „java“ und dem Klassennamen stehen müssen. Alles nach dem zu ladenden Klassennamen wird dieser Klasse als Argument übergeben. Klassennamen werden grundsätzlich ohne .class am Ende eingegeben und Package-Namen werden über den Punkt „.“ kenntlich gemacht.
java [Optionen] Klassenname [Argumente]
Befehl | Beschreibung |
-cp, -classpath | Setzt den Classpath, siehe Kapitel 07.03 Einbinden von externen Klassen – Classpath. |
-client | Verwenden der Java Client HotSpot Virtual Machine (Standard). |
-server | Verwenden der Java Server HotSpot Virtual Machine. |
-Deigenschaft=wert | Setzt eine Eigenschaft, oder auch Property, die später bspw. über System.getProperty abgefragt werden kann. Weitere, relativ häufige Einsatzgebiete: Das Programm auf diesem Weg für den Betrieb auf einem Server ohne Grafikkarte zu konfigurieren (java -Djava.awt.headless=true my.headless.ClassFile ), oder das LookAndFeel zu setzen (java -Dswing.defaultlaf=com.sun.java.swing.plaf.gtk.GTKLookAndFeel my.laf.ClassFile ). |
-ea, -enableassertions | Erlaubt die Verwendung von Assertions. |
-da, -disableassertions | Verbietet die Verwendung von Assertions. |
-esa, -enablesystemassertions | Erlaubt die Verwendung von Assertions in allen System-Klassen. |
-dsa, -disablesystemassertions | Verbietet die Verwendung von Assertions in allen System-Klassen. |
-jar | Führt ein JAR-File aus, siehe Kapitel 07.04.04 jar. |
-verbose:class | Zeigt Informationen über jede geladene Klasse an. Erstellen Sie sich ein einfaches HelloWorld-Programm und führen Sie es mit dieser Option aus. Sie werden eine Vielzahl an Informationen über die geladenen Klassen wie z. B. diese hier erhalten:
|
-verbose:gc | Informiert über jedes Event des GarbageCollectors (siehe Kapitel 07.09 GarbageCollector). Die Ausgabe sieht in etwa so aus:
|
-verbose:jni | Berichtet über Aktivitäten mit dem Java Native Interface. Beispiele:
Registrieren von nativen Methoden:
Dynamisches linken zu nativen Methoden:
|
-version | Zeigt die Version der JRE an. |
-?, -help | Zeigt Informationen über die verfügbaren Optionen an. |
-X | Listet die Nicht-Standard-Optionen auf. |
Zusätzlich zu den genannten Standard-Optionen gibt es noch nicht standardmäßige Optionen. Diese Optionen müssen nicht (je nach verwendeter VirtualMachine) zwingend zur Verfügung stehen.
Befehl | Beschreibung |
-Xint | Anwendung wird im Interpreter-Modus ausgeführt. Dies bedeutet, dass der Bytecode nicht zu nativen Code kompiliert, und der komplette Bytecode vom Interpreter ausgeführt wird. Dadurch werden Verfälschungen durch die Java HotSpot VM vermieden, aber auch der daraus resultierende Performance-Gewinn verloren. |
-Xbatch | Normalerweise werden Methoden im Hintergrund kompiliert und solange wie der Kompilierungsprozess noch nicht beendet wurde im Interpreter-Modus ausgeführt. Dies wird durch diese Option deaktiviert. |
-Xdebug | Startet das Programm mit eingeschaltetem Debugger. |
-Xbootclasspath | Ersetzt den eigentlichen Bootstrap-Classpath durch einen eigenen (siehe Kapitel 07.03 Einbinden von externen Klassen – Classpath). |
-Xbootclasspath/a | Hängt weitere Verzeichnisse und Archive an den Bootstrap-Classpath an. |
-Xbootclasspath/p | Stellt weitere Verzeichnisse und Archive dem Bootstrap-Classpath voran. |
-Xcheck:jni | Überprüft native Methoden zusätzlich u. a. in Form der übergebenen Parameter und Daten der Laufzeitumgebung. |
-Xfuture | Kontrolliert den zu ladenden Byte-Code strikter auf sein Format, als dies ältere Versionen der JVM machen. |
-Xnoclassgc | Deaktiviert den GarbageCollector für Klassen. |
-Xincgc | Durch die Aktivierung der inkrementellen GarbageCollection entstehen unter Umständen langsamere Ausführungszeiten, da Ressourcen ggf. früher freigegeben werden. |
-Xloggc:Datei | Speichert die Ausgaben von -verbose:gc in eine Datei. |
-XmsWert | Spezifiziert den minimal verfügbaren Arbeitsspeicher der Anwendung. Beispiel:
|
-XmxWert | Definiert den maximal verfügbaren Arbeitsspeicher der Anwendung, siehe -Xms . |
-Xprof | Gibt auf der Standardausgabe ein Profiling für die gestartete Anwendung aus. |
-Xrunhprof | Ermöglicht ein Profiling für CPU, Heap und Monitoren. Verwenden Sie -Xrunhprof:help für die exakte Syntax. |
-Xrs | Reduziert die Verwendung von Systemsignalen. |
-XssWert | Setzt die Größe des Thread-Stacks. |
Das Programm javaw ist IMHO nur bei der Laufzeitumgebung für Windows enthalten.
Bei Linux gibt es dieses so nicht.
Hallo sparrow,
da haben Sie recht, das wird aus dem Text nicht ganz deutlich.
Zum Nachlesen:
Windows
Solaris
Linux
Gruß
Stefan