Environnement d'exécution Android et Dalvik

Android Runtime (ART) est l'environnement d'exécution géré utilisé par les applications et certains systèmes sur Android. ART et son prédécesseur, Dalvik, ont été créés à l'origine spécifiquement pour le projet Android. ART lors de l'exécution de l'environnement Dalvik le format exécutable (DEX) et la spécification du bytecode DEX.

ART et Dalvik sont des environnements d'exécution compatibles exécutant le bytecode DEX. développé pour Dalvik devrait fonctionner avec ART. Cependant, certaines qui fonctionnent sur Dalvik ne fonctionnent pas sur ART. Pour en savoir plus sur la les plus importants, consultez la section Vérification le comportement de l'application dans l'environnement d'exécution Android Runtime (ART).

Fonctionnalités ART

Voici quelques-unes des principales fonctionnalités implémentées par ART.

Compilation anticipée (AOT)

La fonctionnalité ART introduit la compilation anticipée (ou compilation AOT), ce qui permet d'améliorer l'application des performances. La vérification des temps d'installation dans ART est aussi plus stricte que celle de Dalvik.

Au moment de l'installation, ART compile les applications en utilisant les données dex2oat. Cet utilitaire accepte les fichiers DEX en entrée et génère un exécutable d'application compilé pour l'appareil cible. L'utilitaire doit être en mesure compiler tous les fichiers DEX valides sans difficulté. Cependant, certaines fonctions de post-traitement les outils produisent des fichiers non valides qui peuvent être tolérés par Dalvik, mais qui ne peuvent pas compilées par ART. Pour en savoir plus, consultez la section Adressage Problèmes de récupération de mémoire.

Récupération de mémoire améliorée

La récupération de mémoire nécessite beaucoup de ressources, ce qui peut altérer les performances d'une application. ce qui entraîne un affichage saccadé, une mauvaise réactivité de l'interface utilisateur et d'autres problèmes. ART réduit la récupération de plusieurs façons:

  • Conception principalement simultanée avec une seule pause de récupération de mémoire
  • Copies simultanées pour réduire l'utilisation et la fragmentation de la mémoire en arrière-plan
  • La durée de la suspension de la récupération de mémoire est indépendante de la taille du tas de mémoire.
  • Collecteur avec un temps total de récupération de mémoire inférieur pour le cas particulier de nettoyage objets de courte durée alloués récemment
  • Amélioration de l'ergonomie de la récupération de mémoire, ce qui rend la récupération de mémoire simultanée collections plus opportunes, ce qui rend GC_FOR_ALLOC extrêmement rares dans les cas d'utilisation classiques

Améliorations apportées au développement et au débogage

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

Compatibilité avec le profileur d'échantillonnage

Jusqu'à présent, les développeurs utilisaient l'API Traceview (conçu pour tracer l'exécution d'une application) en tant que profileur. Traceview fournit des informations utiles, ses résultats sur Dalvik ont été faussés par la surcharge d'appel par méthode. de l'outil affecte sensiblement les performances de temps d'exécution.

ART est compatible avec un profileur d'échantillonnage dédié qui n'inclut pas ces limites. Vous obtenez ainsi une vue plus précise de l'exécution de l'application un ralentissement significatif. La prise en charge de l'échantillonnage a été ajoutée à Traceview pour Dalvik dans la version KitKat.

Prise en charge d'autres fonctionnalités de débogage

ART prend en charge un certain nombre de nouvelles options de débogage, notamment dans les environnements liée à la récupération de mémoire. Par exemple, vous pouvez :

  • Identifiez les verrous conservés dans les traces de la pile, puis accédez au thread qui maintient un verrou.
  • Demandez le nombre d'instances actives d'une classe donnée et demandez à voir et voyez quelles références maintiennent un objet actif.
  • Filtrez les événements (comme les points d'arrêt) pour une instance spécifique.
  • Voir la valeur renvoyée par une méthode lorsqu'elle se ferme (en utilisant "method-exit") événements).
  • Définissez le point d'observation du champ pour suspendre l'exécution d'un programme lorsqu'un est consulté et/ou modifié.

Amélioration des détails du diagnostic dans les exceptions et les rapports d'erreur

ART vous fournit autant de contexte et de détails que possible pour les 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 fournissaient des détails étendus sur les exceptions pour java.lang.ArrayIndexOutOfBoundsException. et java.lang.ArrayStoreException, qui incluent désormais la taille du tableau, le décalage hors limites et ART effectue cette opération également.)

Exemple : java.lang.NullPointerException affiche maintenant des informations sur ce que l'application tentait de faire avec le pointeur nul, comme le champ dans lequel l'application essayait d'écrire ou la méthode . Voici quelques exemples :

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 de meilleures informations contextuelles dans les rapports d'erreur natifs des applications, en incluant des informations sur Java et la pile native.

Signaler des problèmes

Si vous rencontrez des problèmes qui ne sont pas dus à des problèmes JNI d'application, signalez grâce à la plate-forme Android Open Source Project Issue Tracker. Incluez un adb bugreport et un lien vers l'application sur le Google Play Store, le cas échéant. Si possible, joignez un APK qui reproduit le problème.