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.