Le compilateur AOT
La compilation AOT (ahead-Of-Time) permet de compiler les classes Java™ en code natif pour les exécutions ultérieures du même programme. Le compilateur AOT fonctionne avec l'infrastructure de partage des données des classes.
Le compilateur AOT génère le code natif dynamiquement lorsqu'une application s'exécute et met en cache le code AOT généré dans le cache des données partagées. Les machines virtuelles Java suivantes qui exécutent la méthode peuvent charger et utiliser le code AOT depuis le cache des données partagées sans subir les pertes de performances associées au code natif compilé par JIT.
Par défaut, le compilateur AOT est activé, mais uniquement si des classes partagées le sont également. Par défaut, les classes partagées sont désactivées pour empêcher toute activité AOT. Lorsque le compilateur AOT est actif, il sélectionne les méthodes qu'il doit compiler en vue principalement d'accélérer le démarrage.
Dans une JVM sans compilateur AOT ou avec le compilateur AOT activé, le compilateur JIT compile de manière sélective les méthodes fréquemment utilisées dans du code natif optimisé. La compilation des méthodes a un impact de temps, car le compilateur fonctionne pendant que l'application s'exécute. Etant donné que les méthodes commencent par être interprétées et que la plupart des compilations JIT ont lieu au démarrage, le démarrage peut être plus lent.
Vous pouvez accélérer le démarrage en utilisant le code AOT partagé pour fournir du code natif sans compiler. Le délai de chargement du code AOT d'une méthode depuis le cache des données partagées et sa liaison dans un programme en cours d'exécution a un coût. Toutefois, ce dernier est faible comparé au délai nécessaire au compilateur JIT pour compiler la méthode.
L'option -Xshareclasses peut être utilisée pour activer des classes partagées, ce qui peut également activer le compilateur AOT si AOT est activé.