Article de reference

Exécution Android

{{cite web|url=https://android.googlesource.com/platform/art/+/master/NOTICE|title=NOTICE - platform/art - Git at Google|access-date=2021-06-25|archive-date=March 4, 2023|archiv...

Android Runtime ( ART ) est un environnement d'exécution d'applications utilisé par le système d'exploitation Android . Remplaçant Dalvik , la machine virtuelle de processus initialement utilisée par Android, ART effectue la traduction d'une partie du bytecode de l'application en instructions natives qui sont ensuite exécutées par l'environnement d'exécution du périphérique.

Comparaison des architectures Dalvik et ART

Android 2.2 « Froyo » a introduit la compilation à la volée (JIT) basée sur les traces dans Dalvik, optimisant ainsi l'exécution des applications grâce à un profilage continu à chaque lancement et à la compilation dynamique de courts segments de bytecode fréquemment exécutés en code machine natif . Tandis que Dalvik interprète le reste du bytecode de l'application, l'exécution native de ces courts segments, appelés « traces », offre des gains de performance significatifs.

Contrairement à Dalvik, ART introduit la compilation AOT (Ahead-of-Time) en compilant, lors de l'installation, les parties les plus critiques des applications (auparavant, l'application entière) en code machine natif. Ainsi, ART améliore l'efficacité d'exécution globale et réduit la consommation d'énergie, ce qui se traduit par une meilleure autonomie de la batterie sur les appareils mobiles . Parallèlement, ART offre une exécution plus rapide des applications, des mécanismes améliorés d'allocation mémoire et de ramasse-miettes (GC), de nouvelles fonctionnalités de débogage et un profilage de haut niveau plus précis.

Pour assurer la rétrocompatibilité , ART utilise le même bytecode d'entrée que Dalvik, fourni via des fichiers .dex standard inclus dans les fichiers APK . Ces fichiers .odex sont remplacés par des exécutables au format ELF ( Executable and Linkable Format ). Une fois l'application compilée à l'aide de l'utilitaire dex2oat intégré à ART , elle est exécutée à partir de l'exécutable ELF compilé. Ainsi, ART élimine les surcharges d'exécution liées à l'interprétation et à la compilation JIT (Just-In-Time) de Dalvik.

Initialement, l'un des inconvénients de l'ART était le temps de compilation supplémentaire requis lors de l'installation d'une application, et l'espace de stockage secondaire légèrement supérieur (généralement de la mémoire flash ) nécessaire au stockage du code compilé. La longue compilation AOT est devenue particulièrement problématique avec la généralisation des mises à jour de sécurité mensuelles, bloquant l'accès au système d'exploitation pendant une période prolongée après chaque mise à jour.

Pour améliorer cela, une approche hybride a été introduite dans Android 7.0 (Nougat). Les applications nouvellement installées s'exécutent à l'aide de la compilation JIT et sont profilées par l'environnement d'exécution. Lorsque l'appareil est inactif et en charge, l'environnement d'exécution effectue une compilation AOT sur le code le plus fréquemment utilisé (« chaud »).

Histoire

Android 4.4 « KitKat » a introduit une préversion technologique d'ART comme environnement d'exécution alternatif à Dalvik, qui est resté la machine virtuelle par défaut. Dans la version majeure suivante d'Android, Android 5.0 « Lollipop » , Dalvik a été entièrement remplacé par ART.

Android 7.0 « Nougat » a transformé l'ART, initialement une solution AOT pure, en une solution hybride JIT/AOT, tout en remplaçant son environnement d'exécution Java Apache Harmony ( désormais abandonné ) par OpenJDK et en introduisant un compilateur JIT avec profilage du code. Le compilateur JIT complète le compilateur AOT de l'ART, contribuant à améliorer les performances d'exécution et à économiser de l'espace de stockage en identifiant le « code chaud » (code fréquemment utilisé, exécuté sur le thread d'interface utilisateur ou ayant un impact sur le temps de démarrage), que le compilateur AOT compile en code machine lorsque l'appareil est inactif et en charge. Le code moins fréquemment utilisé est compilé à la volée (JIT).

Android 9 « Pie » a réduit l’espace de stockage utilisé par les fichiers APK grâce à l’utilisation de fichiers bytecode compressés . Les données de profilage peuvent être chargées sur les serveurs de Google Play afin d’être intégrées aux applications téléchargées par des utilisateurs possédant un appareil similaire, ce qui réduit le temps de téléchargement depuis Google Play jusqu’à 40 %. Les profils cloud de Google Play permettent d’optimiser les applications dès leur installation, ce qui contribue à éviter les problèmes de performances initiaux rencontrés sur Android 7.0 à 8.1.

En juillet 2021, le concept de profils de base a été introduit. Les profils de base sont des profils ART qui définissent les méthodes et les classes devant être compilées AOT dès le premier lancement d'une application. Ils sont compatibles avec Android 7.0 et versions ultérieures. Ils offrent des fonctionnalités similaires aux profils cloud Google Play d'Android 9 lorsqu'ils ne sont pas disponibles et fusionnent automatiquement avec ces derniers dès leur disponibilité. Les profils de base sont inclus dans les versions des bibliothèques AndroidX et de Jetpack Compose .

L'architecture ART a été mise à jour sous Android 13 avec un nouveau ramasse-miettes (GC) utilisant l' appel système Linux userfaultfd . Cette mise à jour réduit la consommation de mémoire, la taille du code compilé et les saccades , et évite le risque de fermeture inopinée des applications par manque de mémoire lors du ramassage des ordures . D'autres modifications améliorent également le démarrage des applications, réduisent les saccades et optimisent les performances. Dans le cadre du projet Mainline, l'architecture ART d' Android 12 sera également mise à jour.