wake-up-neo.com

Java-Compiler/Interpreter

Warum sagen wir, dass Java eine kompilierte und interpretierte Sprache ist?

Was ist der Vorteil davon (kompiliert und interpretiert)?

19
JavaUser

Java wird zur Kompilierungszeit zu einem "Byte-Zwischencode" kompiliert. Dies steht im Gegensatz zu einer Sprache wie C, die zur Übersetzungszeit in Maschinensprache kompiliert wird. Der Java-Bytecode kann nicht direkt auf Hardware ausgeführt werden wie kompilierter C-Code. Stattdessen muss der Bytecode zur Laufzeit von der JVM (Java Virtual Machine) interpretiert werden, um ausgeführt zu werden. Der Hauptnachteil einer Sprache wie C ist, dass diese Binärdatei beim Kompilieren nur für eine bestimmte Architektur (z. B. x86) funktioniert. 

Interpretierte Sprachen wie PHP sind effektiv systemunabhängig und basieren auf einem system- und architekturspezifischen Interpreter. Dies führt zu einer viel größeren Portabilität (dieselben PHP-Skripts funktionieren auf Windows-Computern und Linux-Computern usw.). Diese Interpretation führt jedoch zu einem erheblichen Leistungsabfall. Hochsprachen wie PHP benötigen mehr Zeit zum Interpretieren als maschinenspezifische Anweisungen, die von der Hardware ausgeführt werden können. 

Java sucht einen Kompromiss zwischen einer rein kompilierten Sprache (ohne Portabilität) und einer rein interpretierten Sprache (die deutlich langsamer ist). Dies geschieht durch Kompilieren des Codes in eine Form, die näher an der Maschinensprache liegt (Java-Byte-Code ist eigentlich eine Maschinensprache, einfach für die Java Virtual Machine), kann aber dennoch problemlos zwischen Architekturen transportiert werden. Da Java für die Ausführung noch eine Softwareschicht benötigt (JVM), handelt es sich um eine interpretierte Sprache. Der Interpreter (die JVM) arbeitet jedoch in einer Zwischenform, die als Bytecode bezeichnet wird, und nicht in den rohen Quelldateien. Dieser Bytecode wird zur Kompilierzeit vom Java-Compiler generiert. Daher ist Java auch eine kompilierte Sprache. Durch diesen Betrieb erhält Java einige Vorteile kompilierter Sprachen und einige Vorteile interpretierter Sprachen. Es erbt jedoch auch einige Einschränkungen von diesen beiden Sprachen. 

Wie Bozho betont, gibt es einige Strategien, um die Leistung von Java-Code (und anderen Byte-Code-Sprachen wie .Net) durch die Verwendung von Just in Time (JIT) -Kompilierung zu steigern. Der tatsächliche Prozess variiert je nach Implementierung von Implementierung zu Implementierung. Das Endergebnis ist jedoch, dass der ursprüngliche Code zur Kompilierzeit in Bytecode kompiliert wird. Zur Laufzeit wird er jedoch vor der Ausführung durch einen Compiler ausgeführt. Auf diese Weise kann der Code mit nahezu nativen Geschwindigkeiten ausgeführt werden. Einige Plattformen (ich glaube .Net tut dies) speichern das Ergebnis der JIT-Kompilierung und ersetzen den Bytecode. Auf diese Weise werden alle zukünftigen Ausführungen des Programms so ausgeführt, als ob das Programm von Anfang an kompiliert worden wäre. 

44
Chris Thompson

Warum sagen wir, Java ist eine kompilierte und interpretierte Sprache.

Da der Quellcode (.Java-Dateien) kompiliert in Bytecode (.class-Dateien) ist, wird er interpretiert von einer Java Virtual Machine (auch als JVM bezeichnet) zur Ausführung ( Die JVM kann weitere Optimierungen durchführen, aber dies ist eine andere Geschichte. 

Was ist der Vorteil davon (kompiliert/interpretiert)

Portabilität. Der same Bytecode kann auf jeder Plattform ausgeführt werden, solange eine JVM installiert ist ("Einmal kompilieren, irgendwo ausführen").

12
Pascal Thivent

Dies ist ein langes Thema, und Sie sollten besser über JIT lesen. Kurz gesagt, Java wird zu Bytecode kompiliert, und der Bytecode wird später (in der JVM) zu Maschinencode kompiliert.

6
Bozho

Java wird als "kompilierte" Sprache betrachtet, da der Code compiled im Bytecode-Format vorliegt, das dann von der Java Virtual Machine (JVM) ausgeführt wird. Dies bietet im Hinblick auf die Leistung und die Codeoptimierung mehrere Vorteile, ganz zu schweigen davon, dass die Korrektheit des Codes gewährleistet ist.

Es wird als "interpretierte" Sprache betrachtet, da der Bytecode nach der Kompilierung auf jedem Computer ausgeführt werden kann, auf dem eine JVM installiert ist. Auf diese Weise ist Java einer interpretierten Sprache sehr ähnlich, da es zum größten Teil nicht von der Plattform abhängt, auf der ausgeführt wird. Dieses Verhalten ähnelt anderen interpretierten Sprachen wie Perl, Python, PHP usw.

Ein theoretischer Nachteil der Tatsache, dass Java-Programme ohne den Quellcode auf jedem System ausgeführt werden können, besteht darin, dass die Entwickler zwar plattformübergreifende Kompatibilität gewährleisten, die Entwickler jedoch einen Grund weniger für die Veröffentlichung ihres Quellcodes haben, der einen Keil verursacht zwischen den ideologischen Bedeutungen der Ausdrücke "plattformübergreifend" und "Open Source".

3
amphetamachine

Java wird in Bytecode und nicht in Binärdateien kompiliert. Die Byte-Codes sind nicht direkt ausführbar. Sie benötigen die Java Virtual Machine, um eine Just-in-Time-Kompilierung durchzuführen und sie zur Laufzeit erneut in Maschinencode zu übersetzen.

Auf einer sehr grundlegenden Ebene wird der Code, den Programmierer schreiben, von dem lokalen Computer, auf dem die JVM ausgeführt wird, getrennt, wodurch die Portabilität verbessert wird. Während das Kompilieren zu Bytecode die Leistung des Just-in-Time-Kompilierens unterstützt, verringert die Dateigröße und hilft mehr oder weniger, echten Code zu verbergen. (es beseitigt auch einige Fehler bei der Kompilierung)

2
Viele

Kompiliert: Ihr Programm ist vor dem Start syntaktisch ein korrektes Java-Programm.

Interpretiert: Führen Sie auf verschiedenen Plattformen denselben (Byte-) Code aus.

Kompiliert: Wenn Ihr Programm korrekt kompiliert wurde, können Sie sicher sein, dass 80% der Softwarefehler unter Kontrolle sind. Und Ihr Code wird nicht angehalten, weil Sie einen Codeblock nicht richtig geschlossen haben usw. 

Interpretiert: Sie wissen was Applets sind? Es war die "Killer" -Anwendung, als Java herauskam. Ihr Browser lädt das Applet von der Website herunter und führt den Applet-Code in Ihrem Browser aus. Das ist nicht sehr cool. Dasselbe Applet kann jedoch unter Windows, Linux, Macs, Solaris usw. ausgeführt werden, da eine Intermedium-Sprache ausgeführt wird: der Bytecode.

1
PeterMmm

Ein statischer Compiler konvertiert Quellcode direkt in Maschinencode, der direkt auf der Zielplattform ausgeführt werden kann, und verschiedene Hardwareplattformen erfordern unterschiedliche Compiler.

Der Java-Compiler konvertiert Java-Quellcode in portable JVM-Bytecodes, die "Anweisungen für virtuelle Maschinen" für die JVM sind. Die erste Generation von JVMs wurde vollständig interpretiert. Die nächste Generation JVMs verwendeten JIT-Compiler (Just-in-Time), um die Ausführung zu beschleunigen

Der HotSpot-Ausführungsprozess kombiniert Interpretation, Profiling und dynamische Kompilierung. Anstatt alle Bytecodes vor der Ausführung in Maschinencode zu konvertieren, wird HotSpot zunächst als Interpreter ausgeführt und kompiliert nur den "heißen" Code - den Code, der am häufigsten ausgeführt wird.

Lesen Sie hier mehr - https://www.ibm.com/developerworks/Java/library/j-jtp12214/

0
yoAlex5