Glossar
Just-in-time-Kompilierung
Unter Just-in-time-Kompilierung (JIT / jitting) versteht man die Kompilierung eines Programms in Maschinensprache zur Laufzeit.
Das Programm selbst liegt nicht in Maschinensprache bzgl. des ausführenden Systems vor, sondern in einer anderen Sprache, z. B. in einer Programmiersprache (C++ / C# / Java / JavaScript / etc.) oder in einer Zwischensprache (Intermediate Language (IL)) vor.
JIT-Compiler übersetzen entweder das ganze Programm bei Programmstart oder Programmteile zur Laufzeit auf Bedarf.
Der Vorteile sind, dass
- ein solches Programm nicht in beliebig viele Versionen (pro Betriebssystem) kompiliert und verteilt werden muss - sondern das Programm kann in einer Version verteilt werden, solange es auf dem Zielsystem einen entsprechenden Just-In-Time-Compiler gibt.
- die Ausführungszeit schneller ist als bei der Ausführung innerhalb eines Interpreters (der den Quellcode einliest, analysiert und auf Basis der Analyse ausführt).
- unter Umständen der Just-In-Time-Compiler während der Laufzeit gesammelte Informationen nutzt, um ein "besseres" Kompilat zu erzeugen, welches dann performanter (Speicher und/oder Laufzeit) ist.
Der Nachteile sind, dass
- auf dem Zielsystem der Just-In-Time-Compiler installiert werden / vorhanden sein muss
- der Start in den meisten Fällen etwas langsamer (im Vergleich zum bereits vollständigen kompilierten Programm) ist, weil einzelne Programmteile ja erst übersetzt werden müssen (im weiteren Verlauf wird auf das Kompilat zugegriffen).
Just-In-Time-Kompilierung wird in zahlreichen Umgebungen und Frameworks eingesetzt, z. B.
- .NET Framework (Kompilierung von Common Intermediate Language (CIL) durch den JIT-Compiler der Common Language Runtime (CLR)). Mit dem Tool ngen kann aber eine Kompilierung des .NET Programms (oder referenzierter .NET Bibliotheken) in den Maschinenecode des Zielsystems durchgeführt werden (so dass keine JIT-Kompilierung mehr notwendig ist)
- Java (Kompilierung von Java Bytecode durch die Virtual Machine (VM) im Java Runtime Environment (JRE))
- Android Apps (Kompilierung von Java Bytecode durch Dalvik oder durch die Android Runtime (ART)). Bei der Android Runtime wird die Android App mittlerweile bereits bei der Installation in Maschinencode des Zielsystems umgewandelt
- Aktuelle Browser (Kompilierung von JavaScript vor Ausführung)