Ich habe eine sehr grundlegende Frage zu JVM: Ist es ein Compiler oder ein Interpreter?
Wenn es sich um einen Interpreter handelt, was ist dann mit dem JIT-Compiler, der in der JVM vorhanden ist?
Wenn nicht, was genau ist dann die JVM? (Ich möchte nicht die grundlegende Definition von jVM für die Konvertierung von Bytecode in maschinenspezifischen Code usw.)
Antworten:
Lassen Sie uns zunächst eine klare Vorstellung von den folgenden Begriffen haben
Javac
is Java Compiler - Kompiliert Ihren Java-Code in BytecodeJVM
ist Java Virtual Machine - Führt Bytecode aus / interpretiert ihn / übersetzt ihn in nativen MaschinencodeJIT
is Just In Time Compiler - Kompiliert die angegebene Bytecode-Befehlssequenz zur Laufzeit in Maschinencode, bevor sie nativ ausgeführt wird. Der Hauptzweck besteht darin, die Leistung stark zu optimieren.Lassen Sie uns nun Antworten auf Ihre Fragen finden.
1)
JVM: is it a compiler or an interpreter?
- Ans: Dolmetscher2)
what about JIT compiler that exist inside the JVM?
- Antwort : Wenn Sie diese Antwort vollständig gelesen haben, wissen Sie sie wahrscheinlich jetzt3)
what exactly is the JVM?
- Ans:.class
Datei in den RAMHoffe das hat dir geholfen ..
quelle
Es ist ein bisschen von beidem, aber auch nicht im traditionellen Sinne.
Moderne JVMs nehmen Bytecode und kompilieren ihn bei Bedarf in nativen Code. "JIT" steht in diesem Zusammenhang für "just in time". Es fungiert von außen als Interpreter, aber hinter den Kulissen wird es in Maschinencode kompiliert.
Die JVM sollte nicht mit dem Java-Compiler verwechselt werden, der den Quellcode in Bytecode kompiliert. Es ist also nicht sinnvoll, es als "Compiler" zu betrachten, sondern zu wissen, dass es im Hintergrund eine Kompilierung durchführt.
quelle
Wie @delnan bereits im Kommentarbereich angegeben hat, ist es keines von beiden .
JVM ist eine abstrakte Maschine, auf der Java-Bytecode ausgeführt wird .
JVM hat mehrere Implementierungen:
... und viele andere .
Die meisten anderen Antworten, wenn es um JVM geht, beziehen sich entweder auf HotSpot oder auf eine Mischung der oben genannten Ansätze zur Implementierung der JVM.
quelle
.dex
Code tatsächlich direkt über Interpretation oder Just-In-Time (JIT) -Kompilierung ausführen ..." ( source.android.com/devices/tech/ota/ab/… )Es ist beides. Es beginnt mit der Interpretation des Bytecodes und kann (falls es sich lohnt) den Bytecode dann in nativen Maschinencode kompilieren.
quelle
Es ist beides. Es kann Bytecode interpretieren und zu nativem Code kompilieren.
quelle
Wie andere gesagt haben, ist es beides! Wenn Sie detailliert darauf verweisen möchten, sehen Sie: Diese IBM Beschreibung
quelle
Javac ist ein Compiler, aber kein traditioneller Compiler. Ein Compiler konvertiert normalerweise Quellcode zur Ausführung in die Sprache auf Maschinenebene. Dies erfolgt in einem einzigen Schuss, dh der gesamte Code wird EINMAL in die Sprache auf Maschinenebene konvertiert. (mehr dazu weiter unten). Währenddessen konvertiert JavaC es in Bytecode anstelle der Sprache auf Maschinenebene.
JIT ist ein Java-Compiler, fungiert aber auch als Interpreter. Ein typischer Compiler konvertiert den gesamten Code auf einmal vom Quellcode in die Sprache auf Maschinenebene. Stattdessen geht JIT Zeile für Zeile (die zeilenweise Ausführung ist eine Funktion von Interpretern) und konvertiert den von JavaC generierten Bytecode in eine Sprache auf Maschinenebene und führt ihn aus. JVM mit JIT verfügt über mehrere Implementierungen. Hotspot ist einer der wichtigsten für die Java-Programmierung. Durch die Hotspot-Implementierung optimiert JIT die Ausführung, indem Codeblöcke, die sich wiederholen, sofort in die Sprache auf Maschinenebene konvertiert werden (wie ein Compiler wie oben erwähnt), sodass sie schneller ausgeführt werden können, anstatt jede Codezeile 1 um 1 zu konvertieren Die Antwort lautet nicht Schwarzweiß in Bezug auf die typischen Definitionen von Compiler und Interpreter.
Dies ist mein Verständnis, nachdem ich mehrere Online-Antworten, Blogs usw. gelesen habe. Wenn jemand Vorschläge zur Verbesserung dieses Verständnisses hat, kann er dies gerne vorschlagen.
quelle
JVM hat sowohl Compiler als auch Interpreter. Weil der Compiler den Code kompiliert und Bytecode generiert. Danach konvertiert der Interpreter Bytecode in maschinenverständlichen Code.
Beispiel: Schreiben und kompilieren Sie ein Programm, das unter Windows ausgeführt wird. Bringen Sie die .class-Datei auf ein anderes Betriebssystem (Unix) und sie wird aufgrund eines Interpreters ausgeführt, der den Bytecode in maschinenverständlichen Code konvertiert.
quelle