Google is committed to advancing racial equity for Black communities. See how.
Cette page a été traduite par l'API Cloud Translation.
Switch to English

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 pendant que l'environnement d'exécution exécute le format Dalvik Executable et la spécification de bytecode Dex.

ART et Dalvik sont des environnements d'exécution compatibles exécutant le bytecode Dex, de sorte que les applications développées pour Dalvik devraient fonctionner 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 l'environnement d'exécution Android (ART) .

Caractéristiques ART

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

Compilation Ahead-of-Time (AOT)

ART introduit la compilation à l'avance (AOT), qui peut améliorer les performances des applications. 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é 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 nettoyage de la mémoire .

Amélioration de la collecte des ordures

Le garbage collection (GC) peut altérer les 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 le ramassage des ordures de plusieurs manières:

  • Une pause GC au lieu de deux
  • Traitement parallélisé pendant la pause GC restante
  • 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 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
  • Compactage du GC pour réduire l'utilisation et la fragmentation de la mémoire en arrière-plan

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

ART propose 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) en tant que profileur. Bien que Traceview donne 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 au moniteur et au garbage collection. 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 le nombre d'instances actives d'une classe donnée, demandez à voir les instances et à voir 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 retournée par une méthode lorsqu'elle se termine (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 accédé et / ou modifié.

Amélioration des détails de diagnostic 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 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 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 d'incidents 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, veuillez les signaler via le suivi des problèmes de projet Open Source Android . Incluez un adb bugreport et un lien vers l'application dans Google Play Store, le cas échéant. Sinon, si possible, joignez un APK qui reproduit le problème.