it-swarm.com.de

Was ist die Verwendung von JVM, wenn JIT eine Bytecode-Umwandlung in Maschinenbefehle durchführt

Ich habe wirklich Schwierigkeiten, das Folgende zu verstehen

Vorher weiß ich:

Beim Kompilieren eines Java-Programms wird eine .class-Datei generiert. In diesem Code ist in Form von Bytes. Der JVM übersetzt dann diesen Bytecode in ein maschinenlesbares Format.

Nun sehe ich in eine der Fragen in SO

Ein Just-In-Time-Compiler (JIT) ist eine Funktion des Laufzeit-Interpreters , Der den Bytecode nicht bei jedem Aufruf einer Methode Interpretiert, sondern den Bytecode in den Maschinencode kompiliert Anweisungen der laufenden Maschine

Daher konvertiert JIT hier den Bytecode in Maschinenanweisungen. Was ist dann die Verwendung von JVM. Das können wir mit JIT. Meines Wissens dient JIT nur dazu, die Leistung von JVM zu verbessern.

27
Anusha

Die JIT ist nur Teil von der JVM. Andere Teile umfassen den Bytecode-Interpreter, die Überprüfungs- und Verknüpfungsmechanismen für das Laden von Klassen sowie die Unterstützung des nativen Codes für Elemente wie Reflektion, E/A usw.

In diesem Sinne macht die JIT die JVM überhaupt nicht schneller. Stattdessen wird Java-Code schneller ausgeführt, als wenn die JVM sie nur interpretieren würde. 

In der Realität beginnt die JVM does mit der Interpretation der Bytecodes. Nach einem bestimmten Zeitraum kompiliert die JVM anschließend mithilfe des JIT-Compilers häufig verwendete Methoden in nativen Code. Dabei werden Statistiken verwendet, die während der Interpretation erfasst wurden, um den Code für das vorliegende Problem zu optimieren.

Übrigens ist dieser Teil des Textes, den Sie zitiert haben, unbeholfen und technisch ungenau:

Ein Just-In-Time-Compiler (JIT) ist eine Funktion des Laufzeit-Interpreters ... (Kontext)

Tatsächlich ist die JIT kein Merkmal des Interpreters. Die JIT ist vielmehr eine Funktionalität der JVM, die neben dem Interpreter arbeitet. 

29
Stephen C

Deutlich sein :

JVM führt alles durch: 

Es bleibt oben auf dem Betriebssystem und bietet eine Abstraktion Zwischen dem kompilierten Java-Programm und dem Betriebssystem. Auf diese Weise muss das kompilierte Programm Java Sich nicht darum kümmern, auf welcher Plattform es Funktionieren muss. Das Java-Programm kompiliert Code in Bytecodes, die JVM Verstehen und ausführen kann.

JIT

Wenn JVM die Klassendatei kompiliert, schließt sie nicht die vollständige Klasse Ab. Es kompiliert nur einen Teil davon bedarfsgerecht. Dies vermeidet das umfangreiche Parsing des gesamten Quellcodes. Diese Art der Kompilierung wird als JIT- oder Just-In-Time-Kompilierung bezeichnet. JVM ist plattformabhängig (OS). Codegenerierung JIT ist plattformorientiert und generiert den systemeigenen Bytecode , so ist es schneller als JVM :)

2
ABraham K

Die Java Virtual Machine (JVM) bietet die gesamte Umgebung zum Ausführen eines Java-Programms. Es lässt sich in das Betriebssystem integrieren, lädt Klassen und führt Programme aus. Der Just-In-Time-Compiler (JIT) ist nur ein kleines Stück, das deaktiviert werden kann (-Xint), bietet jedoch bei Aktivierung eine nützliche Verbesserung der Leistung. Es gab Implementierungen der JVM, die keine JIT enthielten, und Implementierungen, die funktionierten, indem Java vor dem Compilieren von Code genauso wie herkömmliche Sprachen wie C oder C++ vorab kompiliert wurde.

1
Craig Trader

Es kompiliert es rechtzeitig für die JVM mit Optimierungen.

0
niklas