Google is committed to advancing racial equity for Black communities. See how.
This page was translated by the Cloud Translation API.
Switch to English

Android Runtime (ART) und Dalvik

Android Runtime (ART) ist die verwaltete Laufzeit, die von Anwendungen und einigen Systemdiensten unter Android verwendet wird. ART und sein Vorgänger Dalvik wurden ursprünglich speziell für das Android-Projekt entwickelt. ART als Laufzeit führt das Dalvik Executable-Format und die Dex-Bytecode-Spezifikation aus.

ART und Dalvik sind kompatible Laufzeiten mit Dex-Bytecode. Daher sollten für Dalvik entwickelte Apps funktionieren, wenn sie mit ART ausgeführt werden. Einige Techniken, die auf Dalvik funktionieren, funktionieren jedoch nicht auf ART. Informationen zu den wichtigsten Problemen finden Sie unter Überprüfen des App-Verhaltens zur Android-Laufzeit (ART) .

ART-Funktionen

Hier sind einige der wichtigsten Funktionen von ART.

AOT-Kompilierung (Ahead-of-Time)

ART führt eine AOT-Kompilierung (Pre-of-Time) ein, mit der die App-Leistung verbessert werden kann. ART hat auch eine strengere Überprüfung der Installationszeit als Dalvik.

Zur Installationszeit kompiliert ART Apps mit dem dex2oat- Tool auf dem Gerät. Dieses Dienstprogramm akzeptiert DEX- Dateien als Eingabe und generiert eine kompilierte App, die für das Zielgerät ausführbar ist. Das Dienstprogramm sollte problemlos alle gültigen DEX-Dateien kompilieren können. Einige Nachbearbeitungswerkzeuge erzeugen jedoch ungültige Dateien, die von Dalvik toleriert, von ART jedoch nicht kompiliert werden können. Weitere Informationen finden Sie unter Beheben von Garbage Collection-Problemen .

Verbesserte Speicherbereinigung

Die Garbage Collection (GC) ist sehr ressourcenintensiv, was die Leistung einer App beeinträchtigen und zu einer abgehackten Anzeige, einer schlechten Reaktionsfähigkeit der Benutzeroberfläche und anderen Problemen führen kann. ART verbessert die Speicherbereinigung auf verschiedene Weise:

  • Meistens gleichzeitiges Design mit einer einzelnen GC-Pause
  • Gleichzeitiges Kopieren, um die Verwendung und Fragmentierung des Hintergrundspeichers zu reduzieren
  • Die Länge der GC-Pause ist unabhängig von der Heap-Größe
  • Kollektor mit geringerer GC-Gesamtzeit für den Sonderfall der Reinigung kürzlich zugewiesener, kurzlebiger Objekte
  • Verbesserte Ergonomie der GC_FOR_ALLOC , wodurch gleichzeitige GC_FOR_ALLOC zeitnaher werden, wodurch GC_FOR_ALLOC Ereignisse in typischen Anwendungsfällen äußerst selten werden

Verbesserungen bei Entwicklung und Debugging

ART bietet eine Reihe von Funktionen zur Verbesserung der App-Entwicklung und des Debuggens.

Unterstützung für Sampling Profiler

In der Vergangenheit haben Entwickler das Traceview- Tool (das zum Verfolgen der Anwendungsausführung entwickelt wurde) als Profiler verwendet. Während Traceview nützliche Informationen liefert, wurden die Ergebnisse von Dalvik durch den Aufwand pro Methodenaufruf verzerrt, und die Verwendung des Tools wirkt sich spürbar auf die Laufzeitleistung aus.

ART bietet Unterstützung für einen dedizierten Stichprobenprofiler, der diese Einschränkungen nicht aufweist. Dies gibt eine genauere Ansicht der App-Ausführung ohne signifikante Verlangsamung. Traceview für Dalvik wurde in der KitKat-Version um Sampling-Unterstützung erweitert.

Unterstützung für weitere Debugging-Funktionen

ART unterstützt eine Reihe neuer Debugging-Optionen, insbesondere in Bezug auf Monitor- und Garbage Collection-bezogene Funktionen. Zum Beispiel können Sie:

  • Sehen Sie, welche Sperren in Stapelspuren enthalten sind, und springen Sie dann zu dem Thread, der eine Sperre enthält.
  • Fragen Sie, wie viele Live-Instanzen es von einer bestimmten Klasse gibt, fragen Sie nach den Instanzen und sehen Sie, welche Referenzen ein Objekt am Leben halten.
  • Filtern Sie Ereignisse (wie Haltepunkte) für eine bestimmte Instanz.
  • Zeigen Sie den Wert an, der von einer Methode beim Beenden zurückgegeben wird (mithilfe von "method-exit" -Ereignissen).
  • Legen Sie den Feldüberwachungspunkt fest, um die Ausführung eines Programms anzuhalten, wenn auf ein bestimmtes Feld zugegriffen und / oder geändert wird.

Verbesserte Diagnosedetails in Ausnahmen und Absturzberichten

ART bietet Ihnen so viel Kontext und Details wie möglich, wenn Laufzeitausnahmen auftreten. ART bietet erweiterte Ausnahmedetails für java.lang.ClassCastException , java.lang.ClassNotFoundException und java.lang.NullPointerException . (Spätere Versionen von Dalvik lieferten erweiterte Ausnahmedetails für java.lang.ArrayIndexOutOfBoundsException und java.lang.ArrayStoreException , die jetzt die Größe des Arrays und den Off-of-Bound-Offset enthalten, und ART tut dies auch.)

Beispielsweise zeigt java.lang.NullPointerException jetzt Informationen darüber an, was die App mit dem Nullzeiger versucht hat, z. B. das Feld, in das die App schreiben wollte, oder die Methode, die sie aufrufen wollte. Hier einige typische Beispiele:

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 bietet außerdem verbesserte Kontextinformationen in nativen Absturzberichten der App, indem sowohl Java- als auch native Stapelinformationen enthalten sind.

Probleme melden

Wenn Sie auf Probleme stoßen, die nicht auf App JNI-Probleme zurückzuführen sind, melden Sie diese bitte über den Android Open Source Project Issue Tracker . Fügen Sie einen adb bugreport und verlinken Sie auf die App im Google Play Store, falls verfügbar. Andernfalls fügen Sie nach Möglichkeit eine APK hinzu, die das Problem reproduziert.