Android Runtime (ART) 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 runtime exécute le format Dalvik Executable et la spécification du bytecode Dex.

ART et Dalvik sont des runtimes 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, voir 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 de l'application. ART a également 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ée 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 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 nettoyage de la mémoire .

Amélioration de la collecte des ordures

La récupération de place (GC) est très gourmande 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 ordures de plusieurs manières :

  • Conception principalement simultanée avec une seule pause GC
  • Copie simultanée pour réduire l'utilisation et la fragmentation de la mémoire d'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
  • Amélioration de l'ergonomie de la récupération de place, rendant les récupérations de place simultanées 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 des applications.

Prise en charge du profileur d'échantillonnage

Historiquement, les développeurs ont utilisé l'outil Traceview (conçu pour tracer 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 n'a 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 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 surveillance et à la récupération de place. Par exemple, vous pouvez :

  • Voyez quels verrous sont détenus dans les traces de pile, puis passez au thread qui détient un verrou.
  • Demandez combien d'instances actives il y a 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 lorsqu'elle se termine (en utilisant les é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 accédé et/ou modifié.

Détails de diagnostic améliorés 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 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 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 '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 de contexte améliorées dans les rapports de plantage natifs de l'application, en incluant à la fois des informations sur la pile Java et native.

Signaler des problèmes

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