In der Vergangenheit habe ich C ++ als Programmiersprache verwendet. Ich weiß, dass der in C ++ geschriebene Code einen Kompilierungsprozess durchläuft, bis er zum Objektcode "Maschinencode" wird.
Ich würde gerne wissen, wie Java in dieser Hinsicht funktioniert. Wie wird der vom Benutzer geschriebene Java-Code vom Computer ausgeführt?
java
compilation
interpretation
Anzeigename
quelle
quelle
Antworten:
Java-Implementierungen verwenden normalerweise einen zweistufigen Kompilierungsprozess. Java-Quellcode wird vom Java-Compiler zu Bytecode kompiliert. Der Bytecode wird von einer Java Virtual Machine (JVM) ausgeführt. Moderne JVMs verwenden eine Technik namens Just-in-Time (JIT) -Kompilierung , um den Bytecode zu nativen Anweisungen zu kompilieren, die von der Hardware-CPU zur Laufzeit im laufenden Betrieb verstanden werden.
Einige Implementierungen von JVM entscheiden sich möglicherweise dafür, den Bytecode zu interpretieren, anstatt ihn mit JIT zu Maschinencode zu kompilieren und direkt auszuführen. Dies wird zwar immer noch als "Interpreter" betrachtet, unterscheidet sich jedoch erheblich von Interpreten, die den Quellcode auf hoher Ebene lesen und ausführen (dh in diesem Fall wird der Java-Quellcode nicht direkt interpretiert, sondern der Bytecode, der vom Java-Compiler ausgegeben wird).
Es ist technisch möglich, Java vorab zu nativem Code zu kompilieren und die resultierende Binärdatei auszuführen. Es ist auch möglich, den Java-Code direkt zu interpretieren.
Zusammenfassend kann der Bytecode je nach Ausführungsumgebung wie folgt lauten:
quelle
In Java geschriebener Code lautet:
Wann interpretiert Java den Bytecode und wann kompiliert er ihn? Der Anwendungscode wird anfänglich interpretiert, aber die JVM überwacht, welche Sequenzen von Bytecode häufig ausgeführt werden, und übersetzt sie zur direkten Ausführung auf der Hardware in Maschinencode. Bei Bytecode, der nur einige Male ausgeführt wird, wird die Kompilierungszeit gespart und die anfängliche Latenz verringert. Für häufig ausgeführten Bytecode wird die JIT-Kompilierung verwendet, um nach einer anfänglichen Phase langsamer Interpretation mit hoher Geschwindigkeit ausgeführt zu werden. Da ein Programm die meiste Zeit damit verbringt, eine Minderheit seines Codes auszuführen, ist außerdem die reduzierte Kompilierungszeit erheblich. Schließlich können während der anfänglichen Code-Interpretation Ausführungsstatistiken vor der Kompilierung gesammelt werden, was zu einer besseren Optimierung beiträgt.
quelle
Die Begriffe "interpretierte Sprache" oder "kompilierte Sprache" sind nicht sinnvoll, da jede Programmiersprache interpretiert und / oder kompiliert werden kann.
Bei den vorhandenen Implementierungen von Java handelt es sich bei den meisten um einen Kompilierungsschritt zum Bytecode , also um eine Kompilierung. Die Laufzeit kann Bytecode auch dynamisch laden, sodass immer eine Form eines Bytecode-Interpreters benötigt wird. Dieser Interpreter kann wiederum die Kompilierung für nativen Code intern verwenden oder nicht.
Heutzutage wird die teilweise Just-in-Time-Kompilierung für viele Sprachen verwendet, die früher als "interpretiert" galten, beispielsweise JavaScript.
quelle
Java wird zu Bytecode kompiliert, der dann in die Java-VM gelangt, die ihn interpretiert.
quelle
Java ist eine kompilierte Programmiersprache, aber anstatt direkt in ausführbaren Maschinencode zu kompilieren, wird es in eine binäre Zwischenform kompiliert, die als JVM-Bytecode bezeichnet wird. Der Bytecode wird dann kompiliert und / oder interpretiert, um das Programm auszuführen.
quelle
Art von beidem. Zuerst Java kompiliert (einige würden lieber "übersetzt" sagen) zu Bytecode, der dann entweder kompiliert oder je nach Stimmung der JIT interpretiert wird.
quelle
Java kompiliert und interpretiert sowohl.
In Java werden Programme nicht in ausführbare Dateien kompiliert . Sie werden in Bytecode kompiliert (wie bereits erläutert), den die JVM (Java Virtual Machine) zur Laufzeit interpretiert / ausführt. Java-Quellcode wird in Bytecode kompiliert, wenn wir den Javac-Compiler verwenden. Der Bytecode wird mit der Dateierweiterung .class auf der Festplatte gespeichert .
Wenn das Programm ausgeführt werden soll, wird
der Bytecode konvertiert.Der Bytecode kann mithilfe des Just-in-Time-Compilers (JIT) konvertiert werden. Das Ergebnis ist Maschinencode, der dann dem Speicher zugeführt und ausgeführt wird.Javac ist der Java-Compiler, der Java-Code in Bytecode kompiliert. JVM ist eine virtuelle Java-Maschine, die Bytecode ausführt / interpretiert / in nativen Maschinencode übersetzt. In Java wird es zwar als interpretierte Sprache betrachtet, es kann jedoch die JIT-Kompilierung (Just-in-Time) verwenden, wenn sich der Bytecode in der JVM befindet. Der JIT-Compiler liest die Bytecodes in vielen Abschnitten (oder vollständig, selten) und kompiliert sie dynamisch in Maschinencode, damit das Programm schneller ausgeführt und später zwischengespeichert und wiederverwendet werden kann, ohne dass sie neu kompiliert werden müssen. Die JIT-Kompilierung kombiniert also die Geschwindigkeit des kompilierten Codes mit der Flexibilität der Interpretation.
Eine interpretierte Sprache ist eine Art Programmiersprache, für die die meisten ihrer Implementierungen Anweisungen direkt und frei ausführen, ohne zuvor ein Programm in maschinensprachliche Anweisungen zu kompilieren. Der Interpreter führt das Programm direkt aus und übersetzt jede Anweisung in eine Folge von einer oder mehreren Subroutinen, die bereits in Maschinencode kompiliert wurden.
Eine kompilierte Sprache ist eine Programmiersprache, deren Implementierungen in der Regel Compiler (Übersetzer, die Maschinencode aus dem Quellcode generieren) und keine Interpreter sind (schrittweise Ausführen von Quellcode, bei denen keine Übersetzung vor der Laufzeit stattfindet).
In modernen Programmiersprachenimplementierungen wie in Java wird es für eine Plattform immer beliebter, beide Optionen bereitzustellen.
quelle
Java ist eine bytekompilierte Sprache für eine Plattform namens Java Virtual Machine, die stapelbasiert ist und auf vielen Plattformen einige sehr schnelle Implementierungen aufweist.
quelle
Zitat von: https://blogs.oracle.com/ask-arun/entry/run_your_java_applications_faster
Ich würde also sagen, Java ist definitiv eine kompilierte Sprache.
quelle