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 erstelltspeziell für das Android-Projekt. ART als Laufzeit führt das DalvikExecutable-Format und die Dex-Bytecode-Spezifikation aus.
ART und Dalvik sind kompatible Laufzeiten, auf denen Dex-Bytecode ausgeführt wird. Einige jedoch Techniken, die auf Dalvik funktionieren, funktionieren nicht auf KUNST. Informationen zu den wichtigsten Problemen finden Sie unter Überprüfen des App-Verhaltens in der Android-Laufzeit (ART).
ART-Funktionen
Hier sind einige der wichtigsten Funktionen von ART implementiert.
Ahead-of-Time (AOT) -Kompilierung
ART führt eine Ahead-of-Time (AOT) -Kompilierung ein, die die Appperformance verbessern kann. ART hat auch eine engere Echtzeitüberprüfung als Dalvik.
Zum Zeitpunkt der Installation kompiliert ART Apps mit dem On-devicedex2oat-Tool. Dieses Dienstprogramm akzeptiert DEX-Dateien als Eingabe und generiert eine kompilierte ausführbare App für das Zielgerät. Das Dienstprogramm sollte in der Lage seinkompilieren Sie alle gültigen DEX-Dateien problemlos. Einige Nachbearbeitungstools erzeugen jedoch ungültige Dateien, die von Dalvik toleriert werden können, aber nicht von ART. Weitere Informationen finden Sie unter Probleme beim Sammeln von Müll beheben.
Verbesserte Garbage Collection
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. KUNST verbessert garbagecollection in mehrfacher Hinsicht:
- Meist gleichzeitiges Design mit einer einzigen GC-Pause
- Gleichzeitiges Kopieren zur Reduzierung der Hintergrundspeicherauslastung 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 werden, was
GC_FOR_ALLOC
Ereignisse in typischen Anwendungsfällen extrem selten macht
Entwicklungs- und Debugging-Verbesserungen
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 Traceviewtool (für die Ausführung von Tracingapplication) als Profiler verwendet. Während Traceview nützliche Informationen liefert, wurden die Ergebnisse für Dalvik durch den Overhead pro Methodenaufruf verzerrt, und die Verwendung des Tools wirkt sich spürbar 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 ohnerhebliche Verlangsamung. Sampling-Unterstützung wurde Traceview forDalvik 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 Monitor- und Müllsammlungsfunktionen. Zum Beispiel können Sie:
- Sehen Sie, welche Sperren in Stack-Traces gespeichert sind, 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 halten.
- Filterereignisse (wie Haltepunkt) für eine bestimmte Instanz.
- Siehe den Wert, der von einer Methode zurückgegeben wird, wenn sie beendet wird (mithilfe von „method-exit“ -Ereignissen).
- Set field watchpoint, um die Ausführung eines Programms auszusetzen, wenn auf ein bestimmtes Feld zugegriffen und/ oder 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 haben erweiterte Ausnahmedetails für java.lang.ArrayIndexOutOfBoundsException
und java.lang.ArrayStoreException
bereitgestellt, die jetzt die Größe des Arrays und den Offset außerhalb der Grenzen 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 'intandroid.accessibilityservice.AccessibilityServiceInfo.flags' on a null objectreference
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 sowohl Java- als auch native Stack-Informationen einbezogen werden.