2 votes

Que signifient int, jit, fast et portable dans dalvik.vm.execution-mode du fichier build.prop?

Il existe de nombreux ajustements build.prop sur internet, et certains disent que dalvik.vm.execution-mode devrait être int:jit, d'autres disent qu'il devrait être fast:jit ou même dans un ordre inversé tel que jit:fast pour des performances. Quelle est la différence entre int et fast, et est-ce que l'ordre compte (avant et après les deux points)? Mon téléphone fonctionne sous Android 4.4.2 KitKat.

Édition : Juste une note, ART n'est pas pris en charge sur mon appareil (Samsung Galaxy Note 2), même si j'installe le programme dex2oat et libart.so, ça ne fonctionnera pas.

2voto

Andrew T. Points 12017

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 :

androidalle.com

AndroidAlle est une communauté de androiders où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X