Ist die JVM eher mit einem internet browser (firefox zB) oder eher mit einem compatibility layer (zb Wine) vergleichbar? wenn man ein JVM-OS erfinden würde, würden dann die Class-Dateien genauso effizient darauf laufen, wie exe-dateiein auf Windows?
EOF2013-01-06T09:57:13Z
Beste Antwort
Die JVM ist eine Laufzeitumgebung, die den Bytecode zur Laufzeit in Maschinensprache übersetzt. Sie bildet eine Schnittstelle zur Hardware und zum Betriebssystem. Dadurch lassen sich Java-Programme auf verschiedenen Betriebssystemen und sogar auf verschiedenen Hardware-Architekturen ausführen, solange eine JVM darauf läuft.
"Nativ" ausführbare Dateien, etwa im PE-Format (Windows-„exe“-Dateien) oder ELF u.a. unter Linux enthalten hingegen schon den „fertigen“ Maschinencode. Sie müssen nicht erst interpretiert oder „übersetzt“ werden. Das Betriebssystem muß sie nur in den Arbeitsspeicher laden und sie können dann direkt ausgeführt werden. Allerdings kann man diese Binärdateien, im Gegensatz zu Java-Bytecode, in der Regel nur unter dem Betriebssystem und auf der Hardware-Architektur verwenden für die sie erstellt wurden – sie müssen erforderlichenfalls für jedes System passend compiliert werden.
Da bei Java-Programmen der „Umweg“ über die JVM anfällt, ist es praktisch nicht möglich, daß diese genauso effizient laufen wie nativ ausführbare Dateien; es sei denn, man hat einen speziellen Java-Prozessor, der den Bytecode direkt als Maschinensprache verwendet.
Wine funktioniert noch mal etwas anders. Hierbei wird das Programm nicht in Maschinencode übersetzt (da es ja schon in der Form vorliegt), sondern es werden Windows-Systemaufrufe und Bibliotheken zur Verfügung gestellt, auf die das Programm wiederum zugreifen kann. Es funktioniert daher auch nur auf x86-kompatibler Hardware. Java-Programme lassen sich (ohne erneute Compilierung) auch auf anderer Hardware ausführen, wenn dort eine JVM vorhanden ist.
JVM ist "plattformunabhängig", d.h.sie "übersetzt" den Java-Code in die Maschinensprache, die auf dem jeweiligen Computer installiert ist. Dabei arbeitet sie nicht wie ein Compiler, sondern wie ein Interpreter. Allerdings wird dabei eine art "just-in-time-Compiler" verwendet, d.h. nicht das gesamte Programm wird in einem Stück "compiliert", sondern Befehl für Befehl. Daher kann man es nicht mit einer .exe-Datei vergleichen