Java-Laufzeitumgebung
Die virtuelle Java-Maschine
Ein Maschinenprogramm benötigt eine bestimmte Laufzeitumgebung, eben eine Maschine. Die realen Maschinen unserer Welt unterscheiden sich ihren Ausführern und ihren Ein- und Ausgabeeinheiten.
Daher ist es schwierig Programme zu schreiben, die mehrere Maschinen steuern können. Dies ist eines der drückensten Probleme der Softwareentwicklung: Da es sehr kostenintensiv ist, für viele verschiedene Maschinen Programme zu schreiben, sollten Programme auf möglichst vielen verschiedenen Maschinen laufen, sie sollen portabel sein.
Jede Java-Laufzeitumgebung (jre) enthält eine virtuelle Javamaschine (jvm), die Emulation eines Java-Prozessors. Die Eigenschaften der virtuellen Maschine sind weitgehen unabhängig von der realen Maschine, auf der die Simulation läuft. Daher kann auf verschiedenen realen Maschinen die gleiche virtuelle Maschine simuliert werden.
Während also Programme in vielen anderen Sprachen für eine reale Maschine geschrieben werden und somit immer wieder an die verschiedenen realen Maschinen angepasst werden müssen, werden Java-Programme für eine virtuelle Maschinen geschriebem, die auf allen realen Maschinen die gleiche ist. Damit laufen Java-Programme auch auf jeder realen Maschine, ohne daß irgendwelche Anpassungsarbeiten nötig sind, vorausgesetzt, daß es für diese reale Maschine auch eine virtuelle Javamaschine gibt.
Das Java-Programm merkt gar nicht, auf welchem realen Rechner es läuft und von welchem realen Prozessor es ausgeführt wird, es „sieht“ immer nur die immer gleiche virtuelle Maschine und den immer gleichen virtuellen Prozessor.
Die Java-Laufzeitumgebung
.----------------------------------.
| Rechner Typ A, Betriebssystem C |
| .----------------------------. |
| | Java-Laufzeitumgebung, JRE | |
| | .------------------. | |
| | | Java-Programm | | |
| | | | | |
| | '------------------' | |
| | virtueller Prozessor, JVM | |
| '----------------------------' |
| realer Prozessor Typ X |
'----------------------------------'
.----------------------------------.
| Rechner Typ B, Betriebssystem D |
| .----------------------------. |
| | Java-Laufzeitumgebung, JRE | |
| | .-------------------. | |
| | | Java-Programm | | |
| | | | | |
| | '-------------------' | |
| | virtueller Prozessor, JVM | |
| '----------------------------' |
| realer Prozessor Typ Y |
'----------------------------------'
Der Nachteil dieses Verfahrens ist die Vergrößerung der Laufzeit eines Programmes. Einzelne Vorgänge der virtuellen Maschine müssen immer erst in Vorgänge der realen Maschine übersetzt werden. Daher laufen Programme auf einer virtuellen Maschine meist deutlich langsamer als Programme auf einer realen Maschine. Bei den derzeit vorhandenen Laufzeitumgebungen sind allerdings noch nicht alle Möglichkeiten ausgeschöpft, die Programm beschleunigen können. Daher kann man erwarten, daß die Ausführungsgeschwindigkeit von Programmen in den nächsten Jahren noch gesteigert werden kann.
Der Laufzeitlader und -binder von Java
Zur Laufzeit findet der Bindevorgang statt. Benötigt Klassen können sogar noch während das Programm schon abläuft erst über das Netz beschafft und anschließend noch in das Programm eingebunden werden. Hierdurch soll es möglich sein, daß ein Programm schon nach kurzer Zeit gestartet werden kann, während es selber noch gar nicht vollständig übertragen wurde. Das Binden zur Laufzeit erlaubt auch mehr Flexibilität des Programms, da es selber anhand von zur Laufzeit festgestellten Anforderungen entscheiden kann, welche weiteren Programmteile benötigt werden.
Es zeigt sich aber leider, daß der Java-Klassenlader auch beim Laden von Klassen von dem lokalen Rechner eine vergleichsweise lange Zeit braucht (Stand 2001). Dies kann einer der Gründe dafür sein, daß sich Anwendungsprogramme in Java noch nicht weiter verbreitet haben.
Anwendungen und Applets
Zur Ausführung von Programmen gibt es zwei Standardumgebungen, nämlich jeweils eine für Anwendungen und eine für Applet. Mit dem Kommando "java" wird die virtuelle Javamaschine gestartet. Dabei kann eine auszuführende Klasse angegeben werden (deren Klassenobjekt wird dann die Nachricht "main" mit Startargumenten geschickt). Das folgenden Kommando startet die virtuelle Javamaschine mit der Klasse "Hallo".
Kommando
java Hallo
Java-Ausführung
_____
.-' '-.
.' '.
/ \
; ;
| Hallo.class |
; ;
\ /
'. .'
'-._____.-'
|
V
.-------------------.
| |
| java |
| |
'-------------------'
Applets können auch in gängigen Anzeigeprogrammen ablaufen, allerdings können die Anzeiger mit eigener virtueller Maschine oft noch keine Java-2-Applets darstellen, da sie nur das ältere „awt“-System unterstützen. Viele Anzeigeprogramme können aber so nachgerüstet werden, daß sie auch Java-2-Applets darstellen.
Die Umgebung für Applets gibt dem Programm nicht alle Rechte und Möglichkeiten. Dadurch soll verhindert werden, daß feindliche oder bösartige Programme aus dem Netz Schäden anrichten können.
Zur Ausführung eines Java-Applets muß zunächst eine html-Datei erstellt werden. Diese kann dann mit dem Programm "appletviewer" angezeigt werden.
Hallo.html (Ausschnitt)
<object width="400" height="400">
<param name="code" value="Hallo.class">
</object>Kommando
appletviewer Hallo.html
Java-Ausführung [Datenflußplan]
_____
.-' '-.
.' '.
/ \
; ;
| Hallo.html |
; ;
\ /
'. .'
'-._____.-' _____
| .-' '-.
V .' '.
.-------------------. / \
| | ; ;
| appletviewer |<--| Hallo.class |
| | ; ;
'-------------------' \ /
'. .'
'-._____.-'