Warum ist Java kompilierte und interpretierte Sprache ist, wenn der JIT-kompiliert auch der bytecode?
Habe ich gelesen, dass eine java-source-code kompiliert wird, in 'bytecode', dann ist 'Kompiliert' wieder von JIT in 'Maschinencode'. Das heißt, der Quellcode zuerst kompiliert in einen Plattform unabhängigen bytecode und dann neu kompiliert, um einen Maschinen-spezifischen code. Dann, warum ist es genannt, als interpretierte und kompilierte Sprache? Wo die Auslegung erfolgt?
- Es gibt keine solche Sache als 'interpretiert' in Ihren Definitionen sowieso :), Wenn ein JIT-compiler kompiliert Maschinensprache konvertiert es eine Reihe von Anweisungen und führt Optimierungen auf Sie. Ein Dolmetscher gerade nicht, dass eine Sache zu einer Zeit (so ist es oft viel langsamer). Schließlich muss alles auf dem Rechner laufen eh. (Dies ist natürlich eine starke Vereinfachung, aber Sie erhalten den Punkt)
- Versuchen
java -int
- stackoverflow.com/questions/1326071/...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es ist ein bisschen Missverständnis hier.
Unter normalen Umständen java-compiler(
javac
) kompiliert java-code zu Bytecode und java-interpreter(java
) interpretiert diese bytecodes(zeilenweise) auf, wandeln Sie in Maschinensprache und ausführen.JIT(Just in time)
compiler ist ein etwas anderes Konzept. Die JVM verwaltet eine Anzahl von Zeiten, die eine Funktion ausgeführt wird. Wenn es den Grenzwert überschreitet, dann JIT kommt ins Bild. java-code direkt kompiliert in Maschinensprache, und es wird verwendet, um führen Sie diese Funktion aus.Java ist eine Programmier - Sprache.
Es hat eine Spezifikation (JLS), die definiert, wie Java-Programme handeln sollte.
Als Sprache selbst, ist es nicht angeben, wie es ausgeführt werden soll, die auf verschiedenen Plattformen. Die Art, wie es läuft, mit einem JIT oder ohne JIT ist völlig Implementierung basiert.
Wenn ich Schreibe eine Java-runtime morgen nicht die JIT-Kompilierung an alle, die ich anrufen kann Java interpretiert.
Wenn ich eine Java-Maschine ( und Leute ernsthaft, diese ), die mit Java-bytecode als Montage, die ich anrufen kann Java streng zusammengestellt.
Viele anderen Sprachen tun dies:
Gründen der Genauigkeit, lasst uns deutlich machen, dies ist keine Programmiersprache Java Frage, aber eine JVM verfügen.
In der JVM erste Implementierungen, JIT nicht vorhanden ist und der bytecode war immer interpretiert. Dies war aufgrund einer design-Entscheidung zu treffen, kompilierter code, der unabhängig von der physikalischen Maschine und OS mit java, und ist heute noch gültig.
Als später refination, JIT eingeführt wurde Sie in der JVM-Implementierung für eine schnellere Ausführung, aber der bytecode muss noch gültig sein, und übergeben Sie alle Validierungen, bevor übersetzt binäre. Auf diese Weise halten Sie die Plattform-Unabhängigkeit, alle Vernunft und Sicherheit überprüft und Sie gewinnen Leistung.
javac ist der compiler und wandelt java-code in bytecode (siehe bytecode), die leicht auf jedem Rechner laufen, wenn wir eine JVM (java Virtual Machine). und-interpreter konvertiert den java-bytecode in Maschinen-code.
Java ist die Hybrid-Sprache, d.h. es ist sowohl Kompiliert(Arbeit im Voraus) und Interpretiert(Arbeit empfangen-Ende).
Byte-code ist ein IL(ichntermediate Language) auf Java. Java-source-code kompiliert zum Bytecode von
javac
. Manchmal wird dieser byte-code wieder kompiliert in Maschinen-Sprache, die ist nach wie JIT(Just-ichn-Time) Zusammenstellung.JIT-Kompilierung ist eine Möglichkeit der Ausführung von computer-code, beinhaltet die Zusammenstellung, die während der Ausführung eines Programmes – zur Laufzeit – anstatt vor der Ausführung. Quelle
JVM(ohne JIT) interpretiert die java-Intermediate-Language-byte-code, um native Maschine-Sprache wie folgt:
Quelle
JVM ist eine abstrakte Rechenmaschine, es hat mehrere Implementierungen:
HotSpot (Interpreter + JIT-compiler) : die primäre Referenz der Java-VM-Implementierung. Sowohl durch die Oracle-Java und OpenJDK.
JamVM (Interpreter) Entwickelt, um eine extrem kleine virtuelle Maschine im Vergleich zu anderen. Für die Verwendung von GNU Classpath. Unterstützt mehrere Architekturen. GPL.
KUNST (Interpreter + AOT-compiler, d.h. Ahead-of-time-Kompilierung) Einendroid RunTime ist eine Laufzeitumgebung verwendet, die durch das Android Betriebssystem zu ersetzen Dalvik (interpreter + JIT-compiler).
Liste der Java-virtual-Maschinen
Es dient zwei Zwecken. Die erste ist, um sicherzustellen, dass der code syntaktisch und semantisch korrekt. Zweitens, die Kompilierung erzeugt byte-code. Sie beachten, dies ist ein Architektur-Agnostiker intermediate language, das interpretiert werden kann-oder just-in-time-kompilieren zu systemeigenem code von der JVM für eine bestimmte Maschine-Architektur. Durch das kompilieren von byte-code, der sehr viel Aufwand mit der Zusammenstellung kann im Vorfeld getan werden, verlassen die JVM zu generieren von systemeigenem code aus oder interpretiert byte-code, wurde gründlich und sorgfältig vorher geprüft.
Im Gegensatz zu anderen Programmiersprachen ist java kompilierte und interpretierte Sprache. Java-IDE verhält sich wie ein compiler und JVM(java virtual machine) Verhalten sich wie ein Dolmetscher. d.h. bei jedem Programm, lassen Sie sagen, Hallo, ist gespeichert nach dem kompilieren als Hello.java und nach dem kompilieren dieser Datei, die wir bekommen Hello.Class extension-Datei heißt wie die Klasse-Datei -, byte-code-oder intermediate-code. Byte-code ist nicht darauf angewiesen, für eine bestimmte Maschine, so ist es auch als intermediate code.
Zu konvertieren, das byte-code in Maschinen-code oder Maschinen-verständlichen format JVM verwendet, die für verschiedene Betriebssystem. JIT(Just in Time Compiler) ist ein Teil der JVM, die standardmäßig aktiviert ist, kompiliert den bytecode in nativen Maschinencode kompilieren in 'just in time'.