Was macht ein Just-in-Time (JIT) -Compiler?
Was macht ein JIT-compiler speziell zu tun, im Gegensatz zu einem nicht-JIT-compiler? Kann jemand eine prägnante und leicht verständliche Beschreibung?
InformationsquelleAutor der Frage Michiel Borkent | 2008-09-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einem JIT-compiler ausgeführt wird nach das Programm hat gestartet und kompiliert den code (in der Regel bytecode oder irgendeine Art von VM-Anweisungen) on the fly (oder just-in-time, wie man es nennt) in eine form, die in der Regel schneller, in der Regel die host-CPU ' s native Befehlssatz. Ein JIT-hat Zugriff auf dynamische Laufzeit-Informationen in der Erwägung, dass eine standard-compiler nicht zu machen und kann bessere Optimierungen wie inlining von Funktionen, die Häufig verwendet werden.
Dies ist im Gegensatz zu einem herkömmlichen compiler kompiliert alle der code der Maschinen-Sprache vor das Programm zuerst ausgeführt wird.
Paraphrase, herkömmlichen Compiler zu bauen, das ganze Programm, wie eine EXE-Datei, BEVOR Sie das erste mal ausführen. Für die neueren Stil-Programme, die eine assembly generiert wird mit pseudocode (p-code). Nur NACH dem ausführen des Programms auf das Betriebssystem (z.B. durch Doppelklick auf das Symbol) wird der (JIT) compiler kick und generate machine code (m-code), dass die Intel-basierten Prozessor oder was auch immer, verstehen.
InformationsquelleAutor der Antwort Mark Cidade
Anfangs-compiler war verantwortlich für das drehen einer high-level-Sprache (definiert als höheres Niveau als assembler) in object-code (Maschinenbefehle), die dann verknüpft werden (durch einen linker) in ausführbare.
An einem Punkt in der evolution von Programmiersprachen, Compilern kompilieren eine high-level-Sprache in pseudo-code, der dann interpretiert werden (per Dolmetscher), um das Programm auszuführen. Dies eliminiert der Objekt-code und executables, und erlaubt, dass diese Sprachen tragbar sein, um mehrere Betriebssysteme und hardware-Plattformen. Pascal (die kompilierten P-Code) war einer der ersten, Java und C# sind weitere aktuelle Beispiele. Schließlich wird der Begriff der P-Code ersetzt wurde, mit bytecode, da die meisten der pseudo-Operationen sind ein byte lang ist.
Just-In-Time - (JIT -) compiler ist eine Funktion des run-time-interpreter, dass anstelle der Interpretation von bytecode jedes mal, wenn eine Methode aufgerufen wird, kompiliert den bytecode in die Maschinensprache-Anweisungen, die von der Laufenden Maschine, und rufen Sie dann dieses Objekt-code statt. Idealerweise wird die Effizienz der Laufenden Objekt-code zu überwinden, die Ineffizienz der Neukompilierung des Programm jedes mal, wenn es läuft.
InformationsquelleAutor der Antwort Craig Trader
JIT-Just in time
das Wort selbst sagt, wenn Sie benötigt wird (on demand)
Typisches Szenario:
Den source-code ist vollständig umgewandelt in Maschinen-code
JIT-Szenario:
Den Quell-code umgewandelt werden, in Assembler-ähnliche Struktur [für ex-IL (intermediate language) für die C# - ByteCode für die java].
Den intermediate code umgewandelt wird in Maschinen-Sprache nur, wenn die Anwendung benötigt, die erforderlich ist, codes werden nur konvertiert, um Maschinen-code.
JIT vs Nicht-JIT-Vergleich:
In JIT nicht alle, der code wird umgewandelt in Maschinencode ersten Teil
der code, der notwendig ist, umgewandelt werden, in Maschinen-code
dann, wenn eine Methode oder Funktion namens ist nicht in der Maschine dann, dass
gedreht wird in Maschinencode... es reduziert die Last auf der CPU.
Als der Maschinen-code generiert, der zur Laufzeit....der JIT
compiler erzeugen Maschinencode ist optimiert für die Ausführung von
Computers CPU-Architektur.
JIT-Beispiele:
InformationsquelleAutor der Antwort Durai Amuthan.H
Wie andere erwähnt haben
JIT steht für Just-in-Time, was bedeutet, dass der code kompiliert wird, wenn es gebraucht wird, nicht vor der Laufzeit.
Nur um einen Punkt hinzuzufügen, um obigen Diskussion JVM unterhält eine Zählung, wie viele mal, wenn eine Funktion ausgeführt wird. Wenn diese Anzahl übersteigt einen vordefinierten Grenzwert JIT-kompiliert den code in Maschinensprache, die direkt vom Prozessor abgearbeitet werden (im Gegensatz zu den normalen Fall, in dem javac kompilieren Sie den code in bytecode und java - der interpreter interpretiert das bytecode-Zeile wandelt ihn in Maschinencode und führt).
Auch das nächste mal diese Funktion berechnet wird, gleichen kompilierten code ausgeführt wird, wieder anders als die übliche interpretation, in der der code interpretiert wird wieder Zeile für Zeile. Dies macht die Ausführung schneller.
InformationsquelleAutor der Antwort Aniket Thakur
JIT steht für Just-in-Time, was bedeutet, dass der code kompiliert wird, wenn es gebraucht wird, nicht vor der Laufzeit.
Dies ist vorteilhaft, da der compiler generiert code, der optimiert ist für Ihre bestimmten Maschine. Ein statischer compiler, wie Ihre Durchschnittliche C-compiler, kompilieren Sie alle den code in ausführbaren code auf dem Computer des Entwicklers. Daher kann der compiler Optimierungen durchführen, basiert auf bestimmten Annahmen. Es kompilieren können langsam mehr und mehr tun, Optimierungen, weil es wird nicht verlangsamen die Ausführung des Programms für den Benutzer.
InformationsquelleAutor der Antwort Brian Lyttle
Nach der byte-code (was ist Architektur neutral) wurde generiert, indem der Java-compiler die Ausführung wird von der JVM (im Java). Der byte-code wird geladen und in der JVM durch den loader und dann jedes byte Instruktion interpretiert wird.
Wenn wir eine Methode aufrufen müssen, mehrere Male, müssen wir interpretieren den gleichen code viele Male und dies kann mehr Zeit in Anspruch nehmen als nötig. So haben wir die JIT - (just-in-time) Compiler. Wenn das byte schon geladen in der JVM (dessen Laufzeit), der gesamte code wird kompiliert statt interpretiert, das spart Zeit.
JIT-Compiler arbeitet nur während der Laufzeit, so haben wir keine binäre Ausgabe.
InformationsquelleAutor der Antwort User
JIT-compiler nur kompiliert wird der byte-code zu entsprechenden nativen code bei der ersten Ausführung. Bei jeder nachfolgenden Ausführung die JVM verwendet lediglich die bereits kompilierte native code, um die Leistung zu optimieren.
Ohne JIT-compiler, der JVM-interpreter übersetzt die byte-code-Zeile-für-Zeile, um es so erscheinen, als wenn eine native Anwendung ausgeführt wird.
Quelle
InformationsquelleAutor der Antwort
Just-In-Time-Compiler (JIT) :
Es kompiliert die java-bytecodes in Maschinenbefehle der CPU.
Zum Beispiel, wenn wir eine loop-Anweisung im java-code :
Die obige Schleife der code ausgeführt wird, für 10 mal, wenn der Wert von i ist 0.
Ist es nicht notwendig, zu kompilieren, die bytecode für die 10 mal immer wieder die gleiche Anweisung wird ausgeführt für 10 mal. In diesem Fall ist es notwendig, zu kompilieren, der code nur einmal und der Wert kann geändert werden, für die erforderliche Anzahl von Zeiten. So, Just In Time (JIT) - Compiler geht solchen Aussagen und Methoden (wie oben schon gesagt vor) und kompiliert solche Stücke der byte-code in Maschinen-code für eine bessere Leistung.
Einem anderen, ähnlichen Beispiel , dass die Suche nach einem Muster unter Verwendung von "Regular Expression" in einer Liste von Wörtern/Sätzen.
JIT-Compiler nicht kompilieren Sie den code in den Maschinencode. Es kompiliert den code, haben ein ähnliches Muster zur Laufzeit.
Sehen diese Oracle-Dokumentation zu Verstehen, JIT um mehr zu Lesen.
InformationsquelleAutor der Antwort Anands23
Code ist compliled in eine IL (intermediate language). Wenn Sie Ihre Programme, die computer nicht verstehen, diesen code. Es versteht nur nativen code. Also der JIT-compiler kompiliert den IL in systemeigenen code auf die fliege. Es tut dies auf der methodenebene.
InformationsquelleAutor der Antwort Charles Graham
Ich weiß, dies ist ein Alter thread, aber Laufzeit-Optimierung ist ein weiterer wichtiger Bestandteil der JIT-Kompilierung nicht schien hier diskutiert werden. Im Grunde, wird der JIT-compiler kann den monitor das Programm ausgeführt wird, um zu bestimmen, Möglichkeiten zur Verbesserung der Ausführung. Dann, kann es diese änderungen "on the fly" während der Laufzeit. Google JIT-Optimierung (javaworld hat eine ziemlich guter Artikel darüber.)
InformationsquelleAutor der Antwort eze
Jit steht für just-in-time-compiler
jit ist ein Programm, das verwandelt java-byte-code-into-Anweisung, die gesendet werden können, direkt an den Prozessor.
Mithilfe des java just-in-time-compiler (eigentlich eine zweite compiler) bei der jeweiligen system-Plattform entspricht dem bytecode in bestimmten system-code,sobald der code neu kompiliert der jit-complier ,wird es in der Regel schneller in den computer.
Just-in-time-compiler kommt mit der virtuellen Maschine verwendet und ist Optional. Es kompiliert den bytecode in die Plattform-spezifischen ausführbaren code, der sofort ausgeführt wird.
InformationsquelleAutor der Antwort user3459027
Einem nicht-JIT-compiler nimmt Quellcode und wandelt ihn in machine specific byte-code zur compile-Zeit. Ein JIT-compiler nimmt die Maschine Agnostiker byte-code, der generiert wurde, zur compile-Zeit und setzt diese in die Maschine bestimmte byte-code zur Laufzeit. Der JIT-compiler, der Java verwendet wird, was ermöglicht, dass eine einzelne binäre auf einer Vielzahl von Plattformen ohne änderung.
InformationsquelleAutor der Antwort
Die folgenden code-Beispiele zeigen, wie sich der JIT optimiert Java-code.
Code Vor Optimierung
Code Nach Der Optimierung
Ursprünglich, durch den code, der zwei Anrufe, zu der b.get () - Methode. Nach der Optimierung werden die beiden Methodenaufrufe, die optimiert sind, in eine einzelne variable-operation zum kopieren; das heißt, der optimierte code nicht brauchen, um eine Methode aufrufen zu erwerben, die den Wert des Feldes der Klasse B.
InformationsquelleAutor der Antwort Girdhar Singh Rathore
just-in-time (JIT) - Kompilierung (dynamische übersetzung oder die run-time-Kompilierung) ist ein Art und Weise der Ausführung von computer-codedass beinhaltet die Zusammenstellung, die während der Ausführung der Programm – zur Laufzeit – anstatt vor der Ausführung.
ES Zusammenstellung ist ein Kombination von die beiden traditionellen Ansätze, um die übersetzung in den Maschinencode – ahead-of-time-Kompilierung (AOT)und interpretation – und vereint einige Vorteile und Nachteile. Die JIT-Kompilierung kombiniert die Geschwindigkeit von kompiliertem code, der mit der Flexibilität der interpretation.
Betrachten JIT verwendet, die in der JVM,
Beispielsweise die HotSpot-JVM-JIT-Compiler die Generierung von dynamischen Optimierungen. In anderen Worten, Sie stellen die Optimierung von Entscheidungen, während die Java-Anwendung ausgeführt wird, und erzeugen Sie hochleistungsfähige native-Maschinen-Anweisungen gezielt für die zugrunde liegende Systemarchitektur.
Wenn eine Methode gewählt, der für die Zusammenstellung, die JVM-feeds its bytecode, Just-In-Time-compiler (JIT). Die JIT-Anforderungen zu verstehen, die Semantik und syntax der bytecode, bevor Sie kompilieren können Sie die Methode richtig. Zu helfen, den JIT-compiler analysiert die Methode, Ihre bytecode zunächst umformuliert, in eine interne Darstellung als Spur Bäume, die ähnelt Maschinencode näher als bytecode. Analyse und Optimierungen werden dann durchgeführt, auf die Bäume der Methode. Am Ende, die Bäume sind übersetzt in nativen code.
Finden :
InformationsquelleAutor der Antwort prime
20% der byte-code wird verwendet, 80% der Zeit. Der JIT-compiler erhält diese Statistiken und optimiert diese 20% der byte-code-schneller laufen durch das hinzufügen von inline-Methoden, die Entfernung der unbenutzten Schlösser etc. und auch das anlegen der bytecode speziellen Rechner. Ich zitiere aus diesem Artikel, ich fand es praktisch. http://java.dzone.com/articles/just-time-compiler-jit-hotspot
InformationsquelleAutor der Antwort Santosh budhe
JIT bezieht sich auf die Ausführung Motor in paar von JVM-Implementierungen, eine, die ist schneller, benötigt aber mehr Speicher,ist eine just-in-time-compiler. In diesem Schema werden die bytecodes der Methode kompiliert werden nativen Maschinen-code das erste mal die Methode aufgerufen wird. Die nativen Maschinen-code für die Methode ist dann zwischengespeichert, so kann es wieder verwendet werden das nächste mal, die gleiche Methode aufgerufen wird.
InformationsquelleAutor der Antwort Venkata Santhosh Piduri
JVM tatsächlich durchführt Zusammenstellung Schritte während der Laufzeit aus performance-Gründen. Dies bedeutet, dass Java nicht sauber kompilieren-Ausführung Trennung. Die ersten, die es tut, eine so genannte statische Kompilierung von Java-Quellcode zu bytecode. Dann ist dieser bytecode an die JVM für die Ausführung. Aber die Ausführung von bytecode ist langsam, so dass die JVM misst, wie oft der bytecode ausgeführt wird, und, wenn es erkennt einen "hotspot" der code, der ausgeführt werden sehr oft führt es die dynamische Kompilierung von bytecode in machinecode der "hotspot" - code (hotspot-profiler). So heute wirksam Java-Programme ausgeführt werden, die von machinecode Ausführung.
InformationsquelleAutor der Antwort hi.nitish