Was macht der Zygote-Prozess in Android L noch?

12

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.

John
quelle
1
Schwer zu wissen, es ist eine Entwicklerversion und bei weitem nicht vollständig. Im Moment ist eine Menge Kitkat / Jellybean darin eingenäht, nur um es zum Laufen zu bringen und zu booten.
RossC
Da immer noch ein „Entwickler - Vorschau “, könnte es in der Tat nicht viel Sinn zu spekulieren (obwohl ich Dan Erklärung folgen). Es könnte sein, wie Dan es beschrieben hat, oder es könnte ein "Überbleibsel" sein, das noch nicht "vollständig veraltet" ist. Wenn es noch auf L-Release läuft, ist das etwas anderes.
Izzy

Antworten:

13

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.

Dan Hulme
quelle
Entspricht meinem Verständnis von Zygote (als Nicht-Entwickler). Aus der "Benutzeransicht" ist es wahrscheinlich einfacher, sich Zygote als "Anwendungsserver" vorzustellen, der als "Abstraktionsschicht" zwischen den Apps und dem Betriebssystem fungiert (ähnlich wie HAL es bei der abstrakten Hardware tut): Es spielt keine Rolle Was ist "unten" (Dalvik oder ART), die Schnittstelle befasst sich mit "Sachen"?
Izzy
1
Es mag einfacher sein, sich Zygote als Anwendungsserver vorzustellen, aber es ist keine sehr genaue Beschreibung. Es ist nur der Teil des Betriebssystems, der Apps startet, und es befindet sich sehr stark auf der Betriebssystemseite der Grenze zwischen App und Betriebssystem.
Dan Hulme
Danke, so zumindest mein „Grundverständnis“ richtig war (ich bin mir bewusst , „Anwendungsserver“ ist nicht genau, aber einfacher durch einen „normalen Benutzer“ zu verstehen - so mache sie es „Anwendung macht Service “, um es zu holen weiter auf die OS-Seite;)
Izzy
Was im Quellcode vorhanden ist, sind keine "Reste", und wir befinden uns nicht in der Post-Dalvik-Ära! Dalvik-Bitcode ist immer noch das verwendete IR. Selbst bei der höchsten Einstellung ist nicht alles AOT-kompiliert, und es gibt noch einige Dinge, die interpretiert werden müssen. Für diese gibt es also DalvikVM . Außerdem verwenden Geräte mit geringem Speicherplatz weniger AOT mehr Interpretation. Schließlich enthält Zygote jede Menge häufig verwendeter Klassen, wodurch Platz gespart werden kann, da sie von mehreren Anwendungen gemeinsam genutzt werden können.
Paschalis
@Paschalis Sie verwechseln das JIT-Kompilieren mit DalvikVM. Nur weil neuere Versionen der ART do JIT (Just-in-Time) -Kompilierung sind, heißt das nicht, dass Dalvik immer noch da ist. Oracle Java macht auch JIT-Kompilierung, bedeutet nicht, dass es Dalvik
Martin Konecny