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.
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.
b̶i̶t̶c̶o̶d̶e̶
-> bytecode
. D̶a̶l̶v̶i̶k̶V̶M̶
-> ART's Interpreter
. DalvikVM
ist nicht benutzt. Aber sein Interpreter und JIT werden in ART
.Dalvik bytecode
(Oracle nimmt Java-Bytecode) und transformiert ihn. Ein APK enthält nur Dalvik-Bytecode, und wenn dex2oat
es kompiliert wird, entscheiden Filter , was AOT ist (und zur Laufzeit entscheiden die Profile, was JIT ist).
RossC
Izzy