Was macht der Zygote-Prozess noch in Android L?

Ich versuche, die spezifischen Unterschiede in den Laufzeiten von Dalvik und ART herauszufinden. Mir ist klar, dass ART die Dalvik-VM nicht mehr verwendet, aber eines der ersten Dinge, die mir nach der Installation der Android L-Vorschau aufgefallen sind, war, dass der Zygote-Prozess immer noch läuft. Wenn sie die Dalvik-VM wirklich loswerden würden, würde das den Zygote-Prozess nicht nutzlos machen? Darüber hinaus bleibt nach Überprüfung des über AOSP veröffentlichten Quellcodes ein großer Teil von Dalvik übrig.

Schwer zu wissen, es ist eine Entwicklerversion und weit davon entfernt, vollständig zu sein. Im Moment ist eine Menge Kitkat / Jellybean hineingenäht, nur damit es funktioniert und bootet.
Da es sich immer noch um eine "Entwicklervorschau " handelt, macht es in der Tat nicht viel Sinn, darüber zu spekulieren (obwohl ich Dans Erklärung folge). Es könnte so 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 eine andere Sache.

Antworten (1)

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 zu starten und das gesamte System und das Android-Framework jedes Mal neu zu laden, wenn Sie eine App starten möchten, führt es diesen Vorgang einmal durch und stoppt dann an diesem Punkt, bevor Zygote etwas App-spezifisches getan hat . Wenn Sie dann eine App starten möchten, verzweigt sich der Zygote-Prozess, und der untergeordnete Prozess fährt dort fort, wo er aufgehört hat, und lädt die App selbst in die VM.

Obwohl diese Methode ursprünglich für Dalvik entwickelt wurde, gibt es keinen Grund, warum sich ART nicht genauso verhalten sollte. Es muss Apps nicht JIT-kompilieren, während sie laufen, aber es muss immer noch eine Menge App-unabhängiges Java-Zeug geladen werden (dh das gesamte Android-Framework), daher ist es sinnvoll, denselben Fork zu verwenden. geladene Methode, um neue Prozesse zu starten.

Bei einem so großen Projekt ist es natürlich, dass es andere Überbleibsel von Dalvik gibt, die in einer Post-Dalvik-Welt immer noch nützlich sind, also sollten Sie sich nicht wundern, dass es anderen Code gibt, der ursprünglich als Teil von oder für geschrieben wurde Arbeit mit Dalvik, das ist immer noch für ART zu verwenden.

Entspricht meinem Verständnis von Zygote (als Nicht-Entwickler). Aus der "Benutzersicht" macht es es wahrscheinlich einfacher, sich Zygote als "Anwendungsserver" vorzustellen, der als "Abstraktionsschicht" zwischen den Apps und dem Betriebssystem fungiert (irgendwie wie es HAL tut, um Hardware zu abstrahieren): Es spielt keine Rolle Was ist "unten" (Dalvik oder ART), die Schnittstelle befasst sich mit "Zeug"?
Es könnte es einfacher machen, sich Zygote als Anwendungsserver vorzustellen, aber es ist keine sehr genaue Beschreibung. Es ist nur der Teil des Betriebssystems, der Apps startet, und er befindet sich sehr stark auf der Betriebssystemseite der App-Betriebssystem-Grenze.
Danke, also war zumindest mein "Grundverständnis" richtig (ich bin mir bewusst, dass "Anwendungsserver" nicht genau ist, aber für einen "normalen Benutzer" einfacher zu verstehen - also machen wir es zu "Anwendungsdienst " , um es weiter zu bringen die OS-Seite ;)
Was im Quellcode existiert, sind keine "Überbleibsel", und wir befinden uns nicht in der Post-Dalvik-Ära! Der Dalvik-Bitcode ist immer noch das IR, das verwendet wird. 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 wenig Speicherplatz weniger AOT, mehr Interpretation. Schließlich initiert Zygote haufenweise häufig verwendete Klassen, die Platz sparen können, da sie von mehreren Anwendungen gemeinsam genutzt werden können.
@Paschalis Sie verwechseln JIT-Kompilierung mit DalvikVM. Nur weil neuere Versionen von ART JIT (just-in-time) kompilieren, heißt das nicht, dass Dalvik noch da ist. Oracle Java führt auch die JIT-Kompilierung durch, was nicht bedeutet, dass Dalvik verwendet wird
Bearbeiten Sie meinen vorherigen Kommentar: b̶i̶t̶c̶o̶d̶e̶ -> bytecode. D̶a̶l̶v̶i̶k̶V̶M̶-> ART's Interpreter. DalvikVMist nicht benutzt. Aber sein Interpreter und JIT werden in ART.
DalvikVM hat früher Interpretationen und JIT durchgeführt. ART macht AOT, JIT (>=Nougat) und Interpretation. Eine Kompilierung (sei es JIT oder AOT) nimmt Dalvik bytecode(Oracle nimmt Java-Bytecode) und transformiert ihn. Ein APK enthält nur Dalvik-Bytecode, und wenn dex2oates kompiliert wird, entscheiden Filter , was AOT ist (und zur Laufzeit entscheiden die Profile, was JIT ist).