Android Runtime (ART) und Dalvik

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

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

ART-Funktionen

Hier sind einige der wichtigsten von ART implementierten Funktionen.

Ahead-of-Time (AOT)-Kompilierung

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

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

Verbesserte Müllabfuhr

Die 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 Garbage Collection auf verschiedene Weise:

  • Meist 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
  • Collector mit geringerer GC-Gesamtzeit für den Sonderfall der Bereinigung von kürzlich zugeordneten, kurzlebigen Objekten
  • Verbesserte Garbage-Collection-Ergonomie, wodurch gleichzeitige Garbage-Collections zeitnaher werden, wodurch GC_FOR_ALLOC Ereignisse in typischen Anwendungsfällen extrem selten werden

Verbesserungen bei Entwicklung und Debugging

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

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 seine Ergebnisse zu Dalvik durch den Overhead pro Methodenaufruf verzerrt, und die Verwendung des Tools wirkt sich merklich auf die Laufzeitleistung aus.

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

Unterstützung für weitere Debugging-Funktionen

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

  • Sehen Sie, welche Sperren in Stack-Traces gehalten werden, und springen Sie dann zu dem Thread, der eine Sperre enthält.
  • Fragen Sie, wie viele Live-Instanzen einer bestimmten Klasse vorhanden sind, fragen Sie nach den Instanzen und sehen Sie, welche Referenzen ein Objekt am Leben erhalten.
  • Filtern Sie Ereignisse (wie 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 einen Feldüberwachungspunkt fest, um die Ausführung eines Programms auszusetzen, wenn auf ein bestimmtes Feld zugegriffen und/oder es geändert wird.

Verbesserte Diagnosedetails in Ausnahmen und Absturzberichten

ART gibt 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 zu tun versuchte, z. B. das Feld, in das die App zu schreiben versuchte, oder die Methode, die sie aufzurufen versuchte. 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 auch verbesserte Kontextinformationen in App-nativen Absturzberichten, indem es sowohl Java- als auch native Stack-Informationen enthält.

Melden von Problemen

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 -Fehlerbericht und einen Link zur App im Google Play Store hinzu, falls verfügbar. Hängen Sie andernfalls nach Möglichkeit ein APK an, das das Problem reproduziert.