Android Runtime et Dalvik

Android Runtime (ART) est l'environnement d'exécution 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 qu'environnement d'exécution exécute le format Dalvik Executable (DEX) et la spécification de bytecode DEX.

ART et Dalvik sont des environnements d'exécution compatibles exécutant le bytecode DEX. Par conséquent, les applications développées pour Dalvik devraient fonctionner lorsqu'elles sont exécutées avec ART. Toutefois, certaines techniques qui fonctionnent sur Dalvik ne fonctionnent pas sur ART. Pour en savoir plus sur les problèmes les plus importants, consultez Vérifier le comportement des applications 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)

ART introduit la compilation anticipée (AOT), qui peut améliorer les performances des applications. ART offre également une vérification plus stricte au moment de l'installation 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 l'appareil cible. L'utilitaire doit pouvoir compiler tous les fichiers DEX valides sans difficulté. Toutefois, certains outils de post-traitement génèrent des fichiers non valides qui peuvent être tolérés par Dalvik, mais qui ne peuvent pas être compilés par ART. Pour en savoir plus, consultez Résoudre les problèmes de collecte des déchets.

Amélioration de la récupération de mémoire

La récupération de mémoire (GC) est très gourmande en ressources, ce qui peut nuire aux performances d'une application, entraînant un affichage saccadé, une faible réactivité de l'interface utilisateur et d'autres problèmes. ART améliore la récupération de mémoire 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 de mémoire.
  • Collecteur avec un temps de récupération de mémoire total inférieur pour le cas particulier de nettoyage des objets de courte durée récemment alloués
  • Amélioration de l'ergonomie de la récupération de mémoire, ce qui rend les récupérations de mémoire simultanées plus opportunes, ce qui rend les événements GC_FOR_ALLOC extrêmement rares dans les cas d'utilisation courants

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

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

Prise en charge du profileur d'échantillonnage

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

ART prend en charge un profileur d'échantillonnage dédié qui ne présente pas ces limites. Vous obtenez ainsi une vue plus précise de l'exécution de l'application sans ralentissement important. La prise en charge de l'échantillonnage a été ajoutée à Traceview pour Dalvik dans la version KitKat.

Compatibilité avec d'autres 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 à la surveillance et à la récupération de mémoire. Par exemple, vous pouvez :

  • Identifiez les verrous détenus dans les traces de pile, puis accédez au thread qui détient un verrou.
  • Demandez combien d'instances actives d'une classe donnée il existe, demandez à voir les instances et découvrez quelles références maintiennent un objet actif.
  • Filtrez les événements (comme le point d'arrêt) pour une instance spécifique.
  • Afficher la valeur renvoyée par une méthode lorsqu'elle se termine (à l'aide d'événements "method-exit")
  • Définissez un point de surveillance de champ pour suspendre l'exécution d'un programme lorsqu'un champ spécifique est consulté et/ou modifié.

Amélioration des informations de diagnostic dans les exceptions et les rapports d'erreur

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

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 auquel l'application essayait d'écrire ou la méthode qu'elle essayait d'appeler. 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 des informations contextuelles améliorées dans les rapports d'erreur natifs de l'application, en incluant à la fois des informations Java et des informations de 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 l'outil de suivi des problèmes du projet Open Source Android. Incluez un adb bugreport et un lien vers l'application sur le Google Play Store, si disponible. Sinon, si possible, joignez un APK qui reproduit le problème.