Compilation à la volée – JIT

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

  1. Le programme démarre sous forme de bytecode (ex. : .class en Java, IL en .NET).
  2. Lorsqu’une méthode est appelée plusieurs fois, le compilateur JIT la traduit en code natif.
  3. Ce code natif est mis en cache pour les appels suivants.
  4. 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 if toujours 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èreJITAOT
Moment de compilationPendant l’exécutionAvant l’exécution (build)
Performance au démarragePlus lenteInstantanée
OptimisationDynamique, contextuelleStatique, générique
Usage typiqueServeurs, apps longuesApps mobiles, CLI, embarqué

Synonymes

  • Compilation à la volée
  • Compilation dynamique
  • Runtime compilation