EMZETT.
Login

JIT-Compiler (Just-in-Time)

Kurz: Ein JIT-Compiler übersetzt Bytecode oder Quelltext erst während der Ausführung in Maschinencode – und zwar bevorzugt die Programmstellen, die besonders oft laufen („Hot Spots“).

Genauer: So verbinden virtuelle Maschinen die Portabilität von Bytecode mit der Geschwindigkeit nativen Codes. Das Programm startet interpretiert, die VM misst, welche Funktionen oft aufgerufen werden, und kompiliert diese in optimierten Maschinencode. Das Gegenstück ist die AOT-Kompilierung (ahead of time), die vor dem Start übersetzt.

Im Detail

Wo kommt JIT vor?

  • Java (HotSpot-JVM), C# (CLR), JavaScript (V8, SpiderMonkey), PyPy (Python), LuaJIT, Julia (kompiliert jede Funktion beim ersten Aufruf über LLVM), PHP 8 (optional) und Dart (Entwicklungsmodus).

Warmlaufen

Ein JIT-Programm ist beim Start langsamer und erreicht erst nach dem Warmlaufen seine Spitzenleistung. Deshalb sind Benchmarks, die nur einmal laufen, irreführend. Julia-Nutzer kennen das als „Time to first plot“.

Optimierungen

JIT-Compiler nutzen Wissen aus der Laufzeit, das ein vorab arbeitender Compiler nicht hat: tatsächliche Typen, häufige Verzweigungen, Aufrufziele. Sie fügen Funktionen ein (Inlining), entfernen unnötige Prüfungen und machen ihre Annahmen rückgängig (Deoptimierung), falls sie sich als falsch herausstellen.

JIT oder AOT?

JITAOT
Startlangsamerschnell
Spitzenleistungsehr hoch (Laufzeitwissen)hoch
Speicherhöherniedriger
BeispieleHotSpot, V8, PyPyC/C++/Rust, GraalVM Native Image, .NET Native AOT, Dart-Release

Siehe auch Compiler und Interpreter.

Siehe auch: Bytecode, Compiler, Interpreter, Garbage Collector