Résumé
Voici les valeurs pour Dalvik VM en cours d'exécution :
- rapide : optimisé pour la plateforme actuelle, et peut être composé de routines d'assemblage optimisées manuellement (par défaut)
- portable : écrit en C et conçu pour s'exécuter sur une large gamme de plateformes
- jit : compilation juste-à-temps
En ce qui concerne l'ordre, le code source de base reconnaît uniquement int:
.
Selon dalvik/docs/embedded-vm-control.html,
Mode d'exécution
L'implémentation actuelle du Dalvik VM inclut trois cœurs d'interpréteur distincts. Ils sont appelés "rapide", "portable" et "debug". L'interpréteur "rapide" est optimisé pour la plateforme actuelle, et peut être composé de routines d'assemblage optimisées manuellement. En revanche, l'interpréteur "portable" est écrit en C et est censé s'exécuter sur une large gamme de plateformes. L'interpréteur "debug" est une variante de "portable" qui inclut un support pour le profilage et le pas à pas.
Le VM peut également prendre en charge la compilation juste-à-temps. Bien que ce ne soit pas strictement un interpréteur différent, le compilateur JIT peut être activé ou désactivé avec le même indicateur. (Vérifiez la sortie de dalvikvm -help
pour voir si la compilation JIT est activée dans votre VM.)
Le VM vous permet de choisir entre "rapide", "portable" et "jit" avec une forme étendue de l'argument -Xint
. La valeur de cet argument peut être définie via la propriété système dalvik.vm.execution-mode
.
Pour sélectionner l'interpréteur "portable", vous utiliseriez :
adb shell setprop dalvik.vm.execution-mode int:portable
Si la propriété n'est pas spécifiée, l'interpréteur le plus approprié sera sélectionné automatiquement. À un moment donné, ce mécanisme peut permettre la sélection d'autres modes, comme la compilation JIT. Toutes les plateformes n'ont pas d'implémentation optimisée. Dans de tels cas, l'interpréteur "rapide" est généré sous forme de séries de C stubs, et le résultat sera plus lent que la version "portable". (Lorsque nous aurons des versions optimisées pour toutes les architectures populaires, la convention de nommage sera plus précise.)
Si le profilage est activé ou qu'un débogueur est connecté, le VM passe à l'interpréteur "debug". Lorsque le profilage se termine ou que le débogueur se déconnecte, l'interpréteur d'origine est repris. (L'interpréteur "debug" est nettement plus lent, à prendre en compte lors de l'évaluation des données de profilage.)
Le compilateur JIT peut être désactivé au niveau de l'application en ajoutant android:vmSafeMode="true"
dans la balise d'application dans AndroidManifest.xml
. Cela peut être utile si vous soupçonnez que la compilation JIT cause un comportement incorrect de votre application.
Aussi, selon dalvik/docs/porting-guide.html,
Interpréteur
Le runtime de Dalvik inclut deux interpréteurs, appelés "portable" et "rapide". L'interpréteur portable est en grande partie contenu dans une seule fonction C, et devrait être compilé sur tout système prenant en charge gcc. (Si vous n'avez pas gcc, vous devrez peut-être désactiver le modèle d'exécution "threaded", qui repose sur l'implémentation "goto table" de gcc ; recherchez la définition THREADED_INTERP.)
L'interpréteur rapide utilise des fragments d'assemblage codés à la main. Si aucun n'est disponible pour l'architecture actuelle, le système de construction créera un interpréteur à partir de "stubs" C. L'interpréteur "all stubs" résultant est beaucoup plus lent que l'interpréteur portable, faisant du "rapide" quelque chose d'un abus de langage.
L'interpréteur rapide est activé par défaut. Sur les plateformes sans support natif, vous voudrez peut-être passer à l'interpréteur portable. Cela peut être contrôlé avec la propriété système dalvik.vm.execution-mode
. Par exemple, si vous :
adb shell "echo dalvik.vm.execution-mode = int:portable >> /data/local.prop"
et redémarrez, le framework de l'application Android démarrera le VM avec l'interpréteur portable activé.
Lecture supplémentaire :