La compilation JIT est une technique d’exécution de code dans laquelle le bytecode (ou code intermédiaire) est compilé en code machine natif au moment de l’exécution, juste avant d’être utilisé — et non au moment du build (comme en AOT).
Objectif : combiner la portabilité du bytecode avec les performances du code natif, en optimisant dynamiquement selon le contexte réel d’exécution.
Fonctionnement
- Le programme démarre sous forme de bytecode (ex. :
.classen Java, IL en .NET). - Lorsqu’une méthode est appelée plusieurs fois, le compilateur JIT la traduit en code natif.
- Ce code natif est mis en cache pour les appels suivants.
- Le JIT peut même réoptimiser le code en fonction du comportement observé (profilage à chaud).
Avantages
- Adaptation dynamique : optimisations basées sur les données réelles (ex. : une branche
iftoujours vraie). - Portabilité : même bytecode exécutable sur n’importe quelle architecture.
- Démarrage rapide : pas de compilation longue au lancement (contrairement à l’AOT).
Inconvénients
- Latence initiale : les premiers appels sont plus lents (interprétation ou compilation à la volée).
- Surcharge mémoire/CPU : le compilateur tourne en parallèle de l’application.
- Moins prévisible : les performances varient selon le profil d’usage.
Exemples concrets
- Java : la JVM (HotSpot) utilise un JIT très sophistiqué (C1 pour démarrage rapide, C2 pour optimisation long terme).
- .NET : le runtime CLR compile MSIL en natif via JIT.
- JavaScript : moteurs comme V8 (Chrome) ou SpiderMonkey (Firefox) utilisent du JIT pour accélérer l’exécution.
- Android : jusqu’à Android 4.4 (KitKat), Dalvik utilisait un JIT ; depuis Android 7.0, ART combine AOT + JIT hybride pour équilibrer performance et espace disque.
JIT vs AOT (compilation anticipée)
| Critère | JIT | AOT |
|---|---|---|
| Moment de compilation | Pendant l’exécution | Avant l’exécution (build) |
| Performance au démarrage | Plus lente | Instantanée |
| Optimisation | Dynamique, contextuelle | Statique, générique |
| Usage typique | Serveurs, apps longues | Apps mobiles, CLI, embarqué |
Synonymes
- Compilation à la volée
- Compilation dynamique
- Runtime compilation