Ich versuche, die spezifischen Unterschiede in den Laufzeiten von Dalvik und ART herauszufinden. Mir ist klar, dass ART die Dalvik-VM nicht mehr verwendet. Eines der ersten Dinge, die mir nach der Installation der Android L-Vorschau aufgefallen sind, war, dass der Zygote-Prozess noch ausgeführt wird. Wenn sie die Dalvik-VM wirklich loswerden würden, würde das den Zygote-Prozess dann nicht unbrauchbar machen? Darüber hinaus bleibt nach Überprüfung des über AOSP veröffentlichten Quellcodes noch ein großer Teil von Dalvik übrig.
dalvik
art
5.0-lollipop
John
quelle
quelle
Antworten:
Zygote ist nicht wirklich mit Dalvik verbunden, es ist nur ein Init-Prozess. Zygote ist die Methode, mit der Android Apps startet. Anstatt jeden neuen Prozess von Grund auf neu starten zu müssen und das gesamte System und das Android-Framework jedes Mal neu zu laden, wenn Sie eine App starten möchten, wird dieser Prozess einmal ausgeführt und an diesem Punkt gestoppt, bevor Zygote etwas App-spezifisches getan hat . Wenn Sie dann eine App starten möchten, wird der Zygote-Prozess verzweigt, und der untergeordnete Prozess wird dort fortgesetzt, wo er aufgehört hat, und die App selbst wird in die VM geladen.
Obwohl diese Methode ursprünglich für Dalvik entwickelt wurde, gibt es keinen Grund, warum sich ART nicht genauso verhalten sollte. Es muss keine JIT-kompilierten Apps während der Ausführung sein, aber es müssen noch viele app-unabhängige Java-Inhalte geladen werden (dh das gesamte Android-Framework). Daher ist es sinnvoll, dieselbe Gabelung zu verwenden, wenn geladene Methode zum Starten neuer Prozesse.
Bei einem so großen Projekt ist es selbstverständlich, dass es andere Reste von Dalvik gibt, die in einer Post-Dalvik-Welt noch nützlich sind. Sie sollten sich also nicht wundern, dass es anderen Code gibt, der ursprünglich als Teil von oder für geschrieben wurde Arbeite mit Dalvik zusammen, das ART noch nutzen kann.
quelle