Führt die Java Virtual Machine das Programm aus oder die CPU / Bitte Beschreibung lesen?
Eine blöde Frage aber ich bin ein ziemlicher Laie was Computer und programmieren angeht. Ich komme einfach nicht draus da die JVM ja alles auf Maschinencode übersetzt also sollte doch die CPU das übersetzte ausführen und nicht die JVM? Ich komme bei diesem Vorgang nicht draus. Bitte genau erklären. Danke.
3 Antworten
Sowohl als auch.
Das Java-Programm selbst wird in jedem Fall von der JVM ausgeführt. Wenn die JVM selber für den "Host" (den Computer, auf dem das Ganze läuft) ein Programm ist (der Byte-Code also letztlich interpretiert wird), dann tatsächlich, wenn auch eine Virtualisierungsstufe tiefer als das Programm, das die JVM darstellt. Wenn der Java-Bytecode in "nativen" Code (für den Prozessor des Hosts) übersetzt (kompiliert) wird, dann wird die komplette Funktionalität der JVM von dem übersetzten/kompilierten Code (oder einer "Bibliothek" mit vorkompiliertem universell verwendbarem Code) übernommen, insofern existiert die JVM auch hier weiter.
Jede einzelne Operation wird letztlich von der Host-CPU ausgeführt, je nachdem indirekt (interpretiert) oder direkt (kompiliert).
(Übrigens finden sich solche und andere Abstraktionen/Virtualisierungen auf allen Ebenen, von der Hochsprache - z. B. Java- , über das Betriebssystem - Vermittlung zwischen Anwendungsprogramm und Treiberprogramm für die spezifische Hardware -, und sogar bis hinunter zu den Prozessoren selber - "Mikroprogrammierung" / "Mikrobefehl", die üblichen Desktop-Prozessoren sind also ihrerseits virtuelle Maschinen, die Bytecode interpretieren.)
Vielen Dank. Ich habe es mir durchgelesen jetzt ist mir aber nicht bewusst wann die JVM etwas ausführt und wann die CPU. Ist hier nur die Übersetzung in Maschinencode das was die JVM ausführt oder führt die JVM noch etwas anderes aus einem Programm aus?
Sofern ich das richtig interpretiere wird Java Bytecode erzeugt. Dieser muss noch mit Hilfe eines Interpreters verarbeitet werden. Damit kann eine CPU diesen Code nicht direkt verarbeiten.
Rechenoperationen oder das tatsächliche Betreiben von Algorithmen (dazu zähle ich auch Computersprach-Interpreter) unterliegt natürlich der CPU. Aber in diesem Fall über quasi einen aufwendigeren Umweg. Reiner Maschinencode ist die eigentliche Sprache der CPU.
aber nachdem die JVM den code interpretiert hat führt doch die CPU das Programm aus und nicht die JVM ist das richtig?