Android-Laufzeit und Dalvik

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

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

ART-Funktionen

Hier sind einige der wichtigsten von ART implementierten Funktionen.

AOT-Kompilierung (Ahead-of-Time).

ART führt die AOT-Kompilierung (Ahead-of-Time) ein, die die App-Leistung verbessern kann. ART verfügt außerdem über eine strengere Installationszeitüberprüfung als Dalvik.

Bei der Installation kompiliert ART Apps mit dem geräteinternen Tool dex2oat . Dieses Dienstprogramm akzeptiert DEX- Dateien als Eingabe und generiert eine kompilierte ausführbare App-Datei für das Zielgerät. Das Dienstprogramm sollte in der Lage sein, alle gültigen DEX-Dateien problemlos zu kompilieren. Einige Nachbearbeitungstools erzeugen jedoch ungültige Dateien, die von Dalvik möglicherweise toleriert werden, von ART jedoch nicht kompiliert werden können. Weitere Informationen finden Sie unter Beheben von Garbage Collection-Problemen .

Verbesserte Müllsammlung

Garbage Collection (GC) ist sehr ressourcenintensiv, was die Leistung einer App beeinträchtigen kann, was 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 einzigen GC-Pause
  • Gleichzeitiges Kopieren zur Reduzierung der Hintergrundspeichernutzung und Fragmentierung
  • Die Länge der GC-Pause ist unabhängig von der Heap-Größe
  • Kollektor mit geringerer Gesamt-GC-Zeit für den Sonderfall der Bereinigung kürzlich zugewiesener, kurzlebiger Objekte
  • Verbesserte Ergonomie der Garbage Collection, wodurch gleichzeitige Garbage Collections zeitnaher erfolgen, wodurch GC_FOR_ALLOC Ereignisse in typischen Anwendungsfällen extrem selten werden

Verbesserungen bei der Entwicklung und beim Debuggen

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 (zum Verfolgen der App-Ausführung) als Profiler verwendet. Während Traceview nützliche Informationen liefert, wurden seine Ergebnisse auf Dalvik durch den Overhead pro Methodenaufruf verzerrt, und die Verwendung des Tools wirkt sich spürbar auf die Laufzeitleistung aus.

ART bietet Unterstützung für einen dedizierten Sampling-Profiler, der diese Einschränkungen nicht aufweist. Dies ermöglicht einen genaueren Überblick über die App-Ausführung ohne nennenswerte Verlangsamung. In der KitKat-Version wurde Traceview für Dalvik Sampling-Unterstützung hinzugefügt.

Unterstützung für weitere Debugging-Funktionen

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

  • Sehen Sie, welche Sperren in den Stapelspuren gehalten werden, und springen Sie dann zu dem Thread, der eine Sperre hä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 (z. B. Haltepunkte) für eine bestimmte Instanz.
  • Sehen Sie sich den Wert an, der von einer Methode zurückgegeben wird, wenn sie beendet 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 Out-of-Bounds-Offset enthalten, und ART tut dies ebenfalls.)

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 App-nativen Absturzberichten, indem sowohl Java- als auch native Stack-Informationen einbezogen werden.

Probleme melden

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