*.exe erstellen?

Original geschrieben von Cybernd
Negativ es ist und bleibt eine Laufzeitumgebung. Nichts anderes ist eine VM.

Außerhalb dieser Laufzeitumgebung kann der weitere Code nicht ablaufen. Weil eben Java kein rein statisch verlinkter Code sein kann. (Okay können schon, aber nur wenn man auf nahezu alle wichtigen Features verzichten würde).

Ob es sich nun um Bytecode oder direktes natives Compilat handelt ist für die Funktionalität der VM wiederum egal. Sie wäre auch eine VM, wenn sie nur mit nativen Klassen gefüttert werden würde.

cybi

negativ? was meinst du damit?

Warum kann java nicht statisch verlinkt sein?

Ob es Bytecode oder direktes natives Compilat handelt ist für JAVA egal - es bleibt JAVA - aber nicht für die VM. Das eine mal wird sie gebraucht, das andere mal nicht.
 
Gängige VMs werden in c/c++ geschrieben. Sie sind danach Maschinencode.

Nur weil jetzt diese c/c++ Sourcen direkt mit den gewandelten c Sourcen der Klassen vermengt werden, heißt es noch lange nicht das diese VM jetzt nicht mehr vorhanden ist. Sie verbirgt sich trotz allem im compilat das z.b. von Gcj erzeugt wird. Das ist nunmal ein Fakt.

Beim einen male ist die VM und die darin ablaufende Applikation trennbar. Beim anderen male zu einem monolitischen Block verschmolzen. Fakt ist dennoch das beide Varianten diese Art der Laufzeitumgebung beinhalten.

cybi
 
VM ist ein Konzept - nicht ausführbarer Code (für die aktuelle Maschine) wird durch ein Programm ausgeführt! Dieses Konzept ist nicht gegeben.
 
ein Java-Prozessor ist auch keine JavaVM mehr - nur eine "JavaM". Ein GB-Emulator ist auch eine VM, nur weil es einen GB gibt der es ausführt (nativ) heisst das noch lange nicht, dass der Emulator auf meinem x86 dafür keine VM ist.

Wichtig ist der Zusatz "für die aktuelle Maschine"
 
Du willst einfach nicht davon abkommen das die VM sich nur dadurch auszeichnet das CodeA in CodeB übergeführt wird. Dies ist für eine VM absolut irrelevant!

Formulierungen wie die hier (Wikipedia) erklären was VM wirklich bedeutet: "Die VM schottet die in ihr laufenden Prozesse vom Betriebssystem ab. Dies hat zur Folge, dass es nicht mehr möglich ist, mit systemeigenen Mitteln Prozesse zu kontrollieren. Sie stellt aber auch keine eigenen Funktionen zur Prozesskontrolle und -steuerung bereit. Somit können diese auch nicht von außen beendet werden, wenn sie auf Grund eines Fehlers das Gesamtsystem stören. Dazu muß dann die gesamte VM beendet werden."

Das Bytecode in MaschinenCode übersetzt wird ist nur ein zusätzliches schmankerl. Es hat aber im Grunde genommen nichts mit dem "Virtual Machine" zu tun.

Wenn der javac gleich nativen Code erzeugen würde, so würde dieser in exakt der selben VM ablaufen.

BemerkungA: Bald wird man auch Prozesse in der VM beenden können
BemerkungB: Diese Abschottung muß auch im nativen compilat eine gcj durchgeführt werden. Stichwörter: Policy, SecurityManager

cybi
 
Zurück