Que fait encore le processus zygote dans Android L?

13

J'essaie de comprendre les différences spécifiques entre les temps d'exécution Dalvik et ART. Je me rends compte que ART n'utilise plus la machine virtuelle Dalvik, cependant, l'une des premières choses que j'ai remarquées après l'installation de l'aperçu Android L était que le processus zygote est toujours en cours d'exécution. S'ils se sont vraiment débarrassés de la machine virtuelle Dalvik, cela ne rendrait-il pas le processus zygote inutile? De plus, après avoir inspecté le code source publié via AOSP, une grande partie de Dalvik demeure.

John
la source
1
Difficile à savoir, c'est une version développeur et loin d'être complète. Il y a beaucoup de Kitkat / Jellybean cousus en ce moment juste pour le faire fonctionner et démarrer.
RossC
Étant toujours un " aperçu développeur ", il pourrait en effet ne pas avoir beaucoup de sens de spéculer (bien que je suive l'explication de Dan). Cela pourrait être comme Dan l'a décrit, ou ce pourrait être un «reste» pas encore «complètement obsolète». Quand il fonctionne toujours sur L-Release, c'est autre chose.
Izzy

Réponses:

14

Zygote n'est pas vraiment lié à Dalvik, c'est juste un processus d'initialisation. Zygote est la méthode utilisée par Android pour démarrer les applications. Plutôt que d'avoir à démarrer chaque nouveau processus à partir de zéro, de charger à nouveau le système entier et le cadre Android à chaque fois que vous souhaitez démarrer une application, il effectue ce processus une fois, puis s'arrête à ce stade, avant que Zygote n'ait fait quoi que ce soit spécifique à l'application . Ensuite, lorsque vous souhaitez démarrer une application, le processus Zygote bifurque et le processus enfant continue là où il s'était arrêté, en chargeant l'application elle-même dans la machine virtuelle.

Bien que cette méthode ait été initialement conçue pour Dalvik, il n'y a aucune raison pour que ART ne se comporte pas exactement de la même manière. Il n'a pas besoin de compiler JIT pendant leur exécution, mais il a encore beaucoup de choses Java indépendantes de l'application à charger (c'est-à-dire tout le framework Android), il est donc logique d'utiliser le même fork-when- méthode chargée pour démarrer de nouveaux processus.

Il est naturel sur un projet si important qu'il y aurait d'autres restes de Dalvik qui sont toujours utiles dans un monde post-Dalvik, donc vous ne devriez pas être surpris qu'il y ait un autre code qui a été écrit à l'origine pour faire partie de ou pour travailler avec Dalvik, qui est toujours là pour ART à utiliser.

Dan Hulme
la source
Correspond à ma compréhension de Zygote (étant un non-dev). De la "vue utilisateur", il est probablement plus facile de considérer Zygote comme un "serveur d'applications", agissant comme une "couche d'abstraction" entre les applications et le système d'exploitation (comme HAL le fait pour le matériel abstrait): cela n'a pas d'importance qu'est-ce que "ci-dessous" (Dalvik ou ART), l'interface traite des "trucs"?
Izzy
1
Il peut être plus facile de considérer Zygote comme un serveur d'applications, mais ce n'est pas une description très précise. Ce n'est que la partie du système d'exploitation qui démarre les applications, et c'est très bien du côté système d'exploitation de la frontière app-OS.
Dan Hulme
Merci, donc au moins ma "compréhension de base" était correcte (je sais que "serveur d'application" n'est pas précis, mais plus facile à comprendre par un "utilisateur normal" - alors faisons-en " service d' application ", pour l'amener plus loin) côté OS;)
Izzy
Ce qui existe dans le code source ne sont pas des "restes", et nous ne sommes pas à l'ère post-Dalvik! Le bitcode Dalvik est toujours l'IR utilisé. Même avec le réglage le plus élevé, tout n'est pas compilé AOT, et il y a encore des choses à interpréter. Donc, pour ceux-ci, il y a DalvikVM . De plus, les appareils à faible stockage utiliseront moins AOT plus d'interprétation. Enfin, zygote contient des tas de classes fréquemment utilisées, ce qui peut économiser de l'espace car elles peuvent être partagées entre plusieurs applications.
Paschalis
@Paschalis vous confondez la compilation JIT avec DalvikVM. Ce n'est pas parce que les nouvelles versions de la compilation ART do JIT (juste à temps) que Dalvik est toujours là. Oracle Java effectue également la compilation JIT, cela ne signifie pas qu'il utilise Dalvik
Martin Konecny