2013-05-08 4 views
24

ich wirklich kämpfen, um die folgende SacheWas ist die Verwendung von JVM, wenn JIT Durchführung Bytecode Umstellung auf Maschinenbefehle ist

Bisher weiß ich zu verstehen:

Wenn ein Java-Programm kompiliert wird .class Datei generiert wird . In diesem Code ist in Form von Bytes. Dann übersetzt der JVM diesen Byte-Code in maschinenlesbares Format.

Jetzt sehe ich in one of the questions in SO

Ein Just-In-Time (JIT) Compiler ist ein Merkmal der Laufzeit Interpreter, dass anstelle Bytecode ein Verfahren jedes Mal der Interpretation aufgerufen wird, wird kompilieren Sie den Bytecode in den Maschinencode Anweisungen des laufenden Geräts

Also hier wandelt JIT den Bytecode in Maschinenanweisungen um. Was nutzt JVM dann? Das können wir mit JIT machen. In meinem Wissen ist JIT nur für die Verbesserung der Leistung von JVM.

Vielen Dank im Voraus ..

Antwort

2

Um klar zu sagen:

JVM führt alles wie:

Es bleibt auf der Oberseite des Betriebssystems und bietet Abstraktion zwischen dem Java-Programm kompiliert und Betriebssystem. Auf diese Weise, Java kompilierte Programm muss sich nicht darum kümmern, welche Plattform es hat Arbeit. Java-Programm kompiliert Code in Bytecodes, die JVM verstehen und ausführen kann.

JIT

Wenn JVM die Klassendatei kompiliert, ist es nicht die volle Klasse Datei abzuschließen; es kompiliert nur einen Teil davon auf Bedarfsbasis. Dies vermeidet schwere Parsing des vollständigen Quellcodes . Diese Art der Kompilierung wird als JIT oder Just-In-Time-Kompilierung bezeichnet. JVM ist Platform (OS) abhängig Codegenerierung JIT-Plattform ausgerichtet ist, erzeugt den nativen Code Byte, so dass es schneller ein als JVM ist :)

+0

Aber ich sehe Anweisung JIT compiles gesamte Klasse-Datei einmal.Aber in Ihrer Aussage jvm macht Kompilation.Bitte erläutern – Anusha

+0

@Anusha yah ... JVM tut die Kompilierung [Zeile für Zeile] einen nativen Interpreter für Java .. aber JIT ist eine optionale, die nicht nur alles Notwendige, sondern auch notwendige Methoden/Funktionen kompiliert. Für einen Fall in Betracht ziehen: JIT-Compiler überprüft nicht Java-Randbedingungen wie Nullzeiger oder Array außerhalb der Grenzen Ausnahmen. Die einzige Möglichkeit, dass der JIT-Compiler eine Nullzeiger-Ausnahme kennt, ist ein vom Betriebssystem ausgelöstes Signal. –

+0

Das ist einfach falsch. Der Javac-Java-Compiler analysiert den Java-Quellcode und kompiliert ihn zu Java-Bytecode (maschinenunabhängig), Ihren .class-Dateien. Der JIT-Compiler kompiliert diesen Bytecode zu nativem Maschinencode (CPU-Arch-spezifisch). Der JIT-Ausgabemaschinencode führt weiterhin eine Grenzenprüfung und eine Java-Ausnahmebehandlung durch. – arjunyg

1

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

21

Die JIT ist nur Teil der der JVM. Andere Teile enthalten den Bytecode-Interpreter, die Verifikations- und Verknüpfungsmechanismen für die Klassenladung und die native Code-Unterstützung für Dinge wie Reflektion, I/O und so weiter.

In diesem Sinne lässt das JIT die JVM nicht schneller laufen. Stattdessen macht es Java-Code schneller laufen ... als wenn es die JVM nur interpretiert.

In Wirklichkeit beginnt die JVM mit der Interpretation der Bytecodes.Nach einer gewissen Zeit verwendet die JVM dann ihren JIT-Compiler, um häufig verwendete Methoden zu nativem Code zu kompilieren, wobei Statistiken verwendet werden, die während der Interpretation gesammelt wurden, um den Code für das vorliegende Problem zu optimieren.

By the way, ist dieser Teil des Textes, den Sie zitiert ist plump und technisch ungenau:

Ein Just-In-Time (JIT) Compiler ein Merkmal der Laufzeit-Interpreter ist ... (context)

In der Tat ist das JIT kein Merkmal des Interpreters. Vielmehr ist das JIT eine Funktionalität der JVM, die zusammen mit dem Interpreter arbeitet.

0

Die Java Virtual Machine (JVM) stellt die gesamte Umgebung zum Ausführen eines Java-Programms bereit. Es integriert sich in das Betriebssystem, lädt Klassen und führt Programme aus. Der Just-In-Time-Compiler (JIT) ist nur ein kleiner Teil, der deaktiviert werden kann (-Xint), aber wenn er aktiviert ist, bietet er eine nützliche Verbesserung der Leistung. Es gab Implementierungen der JVM, die kein JIT enthielten, und Implementierungen, bei denen Java vorkompiliert wurde, um Code genauso wie traditionelle Sprachen wie C oder C++ zu bearbeiten.