J'essaie de comprendre les différences spécifiques entre les runtimes Dalvik et ART. Je sais qu'ART n'utilise plus la VM Dalvik, mais l'une des premières choses que j'ai remarquées après avoir installé l'aperçu d'Android L est que le processus zygote est toujours en cours. S'ils se sont vraiment débarrassés de la VM Dalvik, cela ne rendrait-il pas le processus zygote inutile ? De plus, en inspectant le code source publié par l'AOSP, une grande partie de Dalvik est toujours présente.
Réponse
Trop de publicités?Zygote n'est pas vraiment lié à Dalvik, c'est juste un processus init. Zygote est la méthode utilisée par Android pour démarrer les applications. Plutôt que de devoir lancer chaque nouveau processus à partir de zéro, en chargeant tout le système et le framework Android à chaque fois que vous voulez lancer une application, il effectue ce processus une fois, puis s'arrête à ce point, avant que Zygote n'ait fait quoi que ce soit de spécifique à l'application. Ensuite, lorsque vous voulez lancer une application, le processus Zygote bifurque, et le processus enfant continue là où il s'est arrêté, en chargeant l'application elle-même dans la VM.
Bien que cette méthode ait été conçue à l'origine pour Dalvik, il n'y a aucune raison pour qu'ART ne se comporte pas exactement de la même manière. Il n'a pas à compiler en JIT les applications en cours d'exécution, mais il doit quand même charger de nombreux éléments Java indépendants de l'application (c'est-à-dire l'ensemble du framework Android), il est donc logique d'utiliser la même méthode de fork-when-loaded pour démarrer de nouveaux processus.
Il est normal, sur un projet d'une telle envergure, qu'il y ait des restes de Dalvik qui soient encore utiles dans un monde post-Dalvik. Il ne faut donc pas s'étonner qu'il y ait d'autres codes écrits à l'origine pour faire partie de Dalvik ou pour fonctionner avec Dalvik, qui sont toujours là pour qu'ART les utilise.