Android runtime (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’originespécifiquement pour le projet Android. ART as the runtime exécute le format DalvikExecutable et la spécification de bytecode Dex.
ART et Dalvik sont des runtimes compatibles exécutant le bytecode Dex, les applications développées pour Dalvik devraient donc fonctionner avec ART. Cependant, certainsles techniques qui fonctionnent sur Dalvik ne fonctionnent pas sur l’art. Pour plus d’informations sur les problèmes les plus importants, consultez Verifyingapp behavior sur le runtime Android (ART).
Caractéristiques de l’ART
Voici quelques-unes des principales caractéristiques mises en œuvre par l’ART.
Compilation à l’avance (AOT)
ART introduit la compilation à l’avance (AOT), qui peut améliorer les performances de l’application. ART a également une vérification du temps d’installation plus serrée que Dalvik.
Au moment de l’installation, ART compile les applications à l’aide de l’outil on-devicedex2oat. Cet utilitaire accepte les fichiers DEX en entrée et généreun exécutable d’application compilé pour le périphérique cible. L’utilitaire devrait pouvoir compiler tous les fichiers DEX valides sans difficulté. Cependant, certains outils de post-traitement produisent des fichiers non valides qui peuvent être tolérés par Dalvik mais ne peuvent pas être compilés par l’art. Pour plus d’informations, reportez-vous à Problèmes de collecte de déchets.
Amélioration de la collecte des ordures
La collecte des ordures (GC) consomme beaucoup de 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. L’ART améliore la collection de vêtements de plusieurs façons:
- Conception principalement simultanée avec une seule pause GC
- Copie simultanée pour réduire l’utilisation de la mémoire d’arrière-plan et la fragmentation
- La longueur de la pause GC est indépendante de la taille du tas
- Collecteur avec un temps total de GC inférieur pour le cas particulier du nettoyage d’objets de courte durée récemment alloués
- Amélioration de l’ergonomie de la collecte des ordures, rendant les collectes de déchets simultanées plus opportunes, 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 des applications.
Prise en charge du profileur d’échantillonnage
Historiquement, les développeurs ont utilisé Traceviewtool (conçu pour l’exécution de tracingapplication) comme profileur. Bien que Traceview donne des informations utiles, ses résultats sur Dalvik ont été faussés par la surcharge d’appel par méthode, et l’utilisation de l’outil affecte sensiblement les performances de l’exécution.
ART ajoute la prise en charge d’un profileur d’échantillonnage dédié qui n’a pas de theselimitations. 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 forDalvik dans la version KitKat.
Prise en charge de plus 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 à la collection de moniteurs et de filtres. Par exemple, vous pouvez:
- Voyez quels verrous sont retenus dans les traces de pile, puis passez au thread qui contient un verrou.
- Demandez combien d’instances vivantes il y a d’une classe donnée, demandez à voir les instances et voyez quelles références maintiennent un objet en vie.
- Filtrer les événements (comme le point d’arrêt) pour une instance spécifique.
- Voir la valeur renvoyée par une méthode lorsqu’elle se termine (en utilisant les événements « method-exit »).
- Définissez le 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 détails de diagnostic dans les exceptions et les rapports de plantage
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 d’exception étendus pour java.lang.ClassCastException
, java.lang.ClassNotFoundException
et java.lang.NullPointerException
.(Les versions ultérieures de Dalvik ont fourni 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 ARTdoes cela aussi.)
Par exemple, java.lang.NullPointerException
affiche maintenant des informations sur ce que l’application essayait de faire avec le pointeur null, 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 'intandroid.accessibilityservice.AccessibilityServiceInfo.flags' on a null objectreference
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 de l’application, en incluant à la fois des informations Java et des informations de pile natives.