L'environnement d'exécution Android (ART) inclut un compilateur JIT (Just-in-Time) avec profilage de code qui améliore continuellement les performances des applications Android au fur et à mesure de leur exécution. Le compilateur JIT complète le compilateur AOT actuel d'ART et améliore les performances d'exécution, économise de l'espace de stockage et accélère l'application et les mises à jour du système. Il améliore également le compilateur AOT en évitant les systèmes Ralentissement lors des mises à jour automatiques des applications ou de la recompilation des applications lors des mises à jour Over The Air (OTA).
Bien que JIT et AOT utilisent le même compilateur avec un ensemble d'optimisations similaire, le code généré peut ne pas être identique. JIT utilise le type d'exécution permet une meilleure intégration et facilite le remplacement de la pile (OSR). compilation possible, qui génèrent toutes un code légèrement différent.
Architecture JIT
![Architecture JIT](https://source.android.com/docs/core/runtime/images/jit-arch.png?authuser=0&hl=fr)
Compilation JIT
La compilation JIT implique les activités suivantes:
![Démonstration guidée par le profil](https://source.android.com/docs/core/runtime/images/jit-profile-comp.png?authuser=0&hl=fr)
- L'utilisateur exécute l'application, ce qui déclenche ensuite ART pour charger le
.dex
. .- Si le fichier
.oat
(le binaire AOT du.dex
) est disponible, ART l'utilise directement. Bien que les fichiers.oat
soient générés régulièrement, ils ne contiennent pas toujours du code compilé (binaire AOT). - Si le fichier
.oat
ne contient pas de code compilé, ART s'exécute via JIT et l'interpréteur pour exécuter le fichier.dex
.
- Si le fichier
- JIT est activé pour toute application qui n'est pas compilée selon les
Filtre de compilation
speed
(qui indique "compilez autant que possible" depuis l'application"). - Les données de profil JIT sont vidées dans un fichier situé dans un répertoire système qui ne auquel l'application peut accéder.
- Le daemon de compilation AOT (
dex2oat
) analyse ce fichier pour piloter sa compilation.
Figure 3. Activités du daemon JIT.
Le service Google Play est un exemple utilisé par d'autres applications qui se comportent comme les bibliothèques partagées.
Workflow JIT
![Architecture JIT](https://source.android.com/docs/core/runtime/images/jit-workflow.png?authuser=0&hl=fr)
- Les informations de profilage sont stockées dans le cache de code et envoyées à la corbeille
en cas de saturation de la mémoire.
- Rien ne garantit qu'un instantané soit pris lorsque l'application se trouvait dans contient des données complètes (c'est-à-dire toutes les données qui ont fait l'objet d'un JITing).
- Il n'y a aucune tentative de s'assurer que tout est enregistré (car cela peut avoir un impact performances d'exécution).
- Les méthodes peuvent avoir trois états différents:
<ph type="x-smartling-placeholder">
- </ph>
- interprété (code DEX)
- Compilation JIT
- Compilation anticipée (ou "compilation AOT")
- Mémoire requise pour exécuter JIT sans affecter l'application au premier plan dépendent de l'application en question. Les applications volumineuses nécessitent plus de mémoire que les petites applications. En général, la taille des applications volumineuses est d'environ 4 Mo.
Activer la journalisation JIT
Pour activer la journalisation JIT, exécutez les commandes suivantes:
adb root
adb shell stop
adb shell setprop dalvik.vm.extra-opts -verbose:jit
adb shell start
Désactiver le JIT
Pour désactiver le JIT, exécutez les commandes suivantes:
adb root
adb shell stop
adb shell setprop dalvik.vm.usejit false
adb shell start
Forcer la compilation
Pour forcer la compilation, exécutez la commande suivante:
adb shell cmd package compile
Cas d'utilisation courants de la compilation forcée d'un package spécifique:
- Basée sur le profil:
adb shell cmd package compile -m speed-profile -f my-package
- Complet:
adb shell cmd package compile -m speed -f my-package
Cas d'utilisation courants de la compilation forcée de tous les packages:
- Basée sur le profil:
adb shell cmd package compile -m speed-profile -f -a
- Complet:
adb shell cmd package compile -m speed -f -a
Effacer les données du profil
Sur Android 13 ou version antérieure
Pour effacer les données de profil local et supprimer le code compilé, exécutez la commande suivante:
adb shell pm compile --reset
Sur Android 14 ou version ultérieure
Pour effacer uniquement les données du profil local:
adb shell pm art clear-app-profiles
Remarque: Contrairement à la commande d'Android 13, ou version antérieure, cette commande n'efface pas les données de profil externes (.dm) qui sont installé avec l'application.
Pour effacer les données de profil local et supprimer le code compilé généré à partir de données locales données de profil (pour rétablir l'état d'installation, par exemple), exécutez la commande suivante:
adb shell pm compile --reset
Remarque: Cette commande ne supprime pas le code compilé généré à partir de données de profil externes (`.dm`) installées avec l'application.
Pour effacer tout le code compilé, exécutez cette commande:
adb shell cmd package compile -m verify -f
Remarque: Cette commande conserve les données de profil locales.