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, die von ART implementiert wurden.

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 in der Lage sein, alle gültigen DEX-Dateien problemlos zu kompilieren. 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 Speicherbereinigung (Garbage Collection, GC) ist sehr ressourcenintensiv. Dies kann die Leistung einer App beeinträchtigen und zu einer abgehackten Anzeige, einer schlechten Reaktionsfähigkeit der Benutzeroberfläche und anderen Problemen führen. 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 den Haltepunkt) 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 stellten erweiterte Ausnahmedetails für java.lang.ArrayIndexOutOfBoundsException und java.lang.ArrayStoreException bereit, die jetzt die Größe des Arrays und den Off-of-Bound-Offset enthalten.

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 die App im Google Play Store, falls verfügbar. Andernfalls fügen Sie nach Möglichkeit eine APK hinzu, die das Problem reproduziert.