Exécution Android et Dalvik

Le runtime Android (ART) est le runtime géré utilisé par les applications et certains services système sur Android. ART et son prédécesseur Dalvik ont ​​été créés à l'origine spécifiquement pour le projet Android. ART en tant que moteur d'exécution exécute le format exécutable Dalvik (DEX) et la spécification de bytecode DEX.

ART et Dalvik sont des environnements d'exécution compatibles exécutant le bytecode DEX, donc les applications développées pour Dalvik devraient fonctionner lorsqu'elles sont exécutées avec ART. Cependant, certaines techniques qui fonctionnent sur Dalvik ne fonctionnent pas sur ART. Pour plus d'informations sur les problèmes les plus importants, consultez Vérification du comportement de l'application sur le runtime Android (ART) .

Fonctionnalités ART

Voici quelques-unes des principales fonctionnalités mises en œuvre par ART.

Compilation anticipée (AOT)

ART introduit la compilation anticipée (AOT), qui peut améliorer les performances des applications. ART dispose également d'une vérification du temps d'installation plus stricte que Dalvik.

Au moment de l'installation, ART compile les applications à l'aide de l'outil dex2oat sur l'appareil. Cet utilitaire accepte les fichiers DEX en entrée et génère un exécutable d'application compilé pour le périphérique cible. L'utilitaire devrait être capable de compiler tous les fichiers DEX valides sans difficulté. Cependant, certains outils de post-traitement produisent des fichiers invalides qui peuvent être tolérés par Dalvik mais ne peuvent pas être compilés par ART. Pour plus d'informations, consultez Résolution des problèmes de récupération de place .

Collecte des déchets améliorée

Le garbage collection (GC) est très gourmand en ressources, ce qui peut nuire aux performances d'une application, entraînant un affichage saccadé, une mauvaise réactivité de l'interface utilisateur et d'autres problèmes. ART améliore la collecte des déchets de plusieurs manières :

  • Conception principalement concurrente avec une seule pause GC
  • Copie simultanée pour réduire l'utilisation et la fragmentation de la mémoire en arrière-plan
  • La durée de la pause GC est indépendante de la taille du tas
  • Collecteur avec un temps GC total inférieur pour le cas particulier du nettoyage d'objets de courte durée récemment alloués
  • Ergonomie améliorée du garbage collection, rendant les garbage collection simultanés plus rapides, ce qui rend les événements GC_FOR_ALLOC extrêmement rares dans les cas d'utilisation typiques

Améliorations du développement et du débogage

ART offre un certain nombre de fonctionnalités pour améliorer le développement et le débogage d'applications.

Prise en charge du profileur d'échantillonnage

Historiquement, les développeurs ont utilisé l'outil Traceview (conçu pour suivre l'exécution des applications) comme profileur. Bien que Traceview fournisse des informations utiles, ses résultats sur Dalvik ont ​​été faussés par la surcharge par appel de méthode, et l'utilisation de l'outil affecte sensiblement les performances d'exécution.

ART ajoute la prise en charge d'un profileur d'échantillonnage dédié qui ne présente pas ces limitations. Cela donne une vue plus précise de l’exécution de l’application sans ralentissement significatif. La prise en charge de l'échantillonnage a été ajoutée à Traceview pour Dalvik dans la version KitKat.

Prise en charge de davantage de fonctionnalités de débogage

ART prend en charge un certain nombre de nouvelles options de débogage, en particulier dans les fonctionnalités liées au moniteur et au garbage collection. Par exemple, vous pouvez :

  • Vérifiez quels verrous sont détenus dans les traces de pile, puis accédez au thread qui détient un verrou.
  • Demandez combien d'instances actives il existe d'une classe donnée, demandez à voir les instances et voyez quelles références maintiennent un objet en vie.
  • Filtrez les événements (comme le point d'arrêt) pour une instance spécifique.
  • Voir la valeur renvoyée par une méthode à sa sortie (en utilisant les événements « method-exit »).
  • Définissez le point de surveillance du champ pour suspendre l'exécution d'un programme lorsqu'un champ spécifique est consulté et/ou modifié.

Détails de diagnostic améliorés dans les exceptions et les rapports d'erreur

ART vous donne autant de contexte et de détails que possible lorsque des exceptions d'exécution se produisent. ART fournit des détails étendus sur les exceptions pour java.lang.ClassCastException , java.lang.ClassNotFoundException et java.lang.NullPointerException . (Les versions ultérieures de Dalvik ont ​​fourni des détails étendus sur les exceptions pour java.lang.ArrayIndexOutOfBoundsException et java.lang.ArrayStoreException , qui incluent désormais la taille du tableau et le décalage hors limites, et ART le fait également.)

Par exemple, java.lang.NullPointerException affiche désormais des informations sur ce que l'application essayait de faire avec le pointeur nul, comme le champ dans lequel l'application essayait d'écrire ou la méthode qu'elle essayait d'appeler. Voici quelques exemples typiques :

java.lang.NullPointerException: Attempt to write to field 'int
android.accessibilityservice.AccessibilityServiceInfo.flags' on a null object
reference
java.lang.NullPointerException: Attempt to invoke virtual method
'java.lang.String java.lang.Object.toString()' on a null object reference

ART fournit également des informations contextuelles améliorées dans les rapports de plantage natifs des applications, en incluant à la fois des informations sur Java et sur la pile native.

Signaler des problèmes

Si vous rencontrez des problèmes qui ne sont pas dus à des problèmes JNI de l'application, signalez-les via le suivi des problèmes du projet Open Source Android . Incluez un adb bugreport et un lien vers l'application dans le Google Play Store si disponible. Sinon, si possible, joignez un APK qui reproduit le problème.