Estoy tratando de descubrir las diferencias específicas en los tiempos de ejecución de Dalvik y ART. Me doy cuenta de que ART ya no usa la VM Dalvik, sin embargo, una de las primeras cosas que noté después de instalar la vista previa de Android L fue que el proceso de cigoto todavía se está ejecutando. Si realmente se deshicieran de la VM Dalvik, ¿no haría que el proceso del cigoto fuera inútil? Además, al inspeccionar el código fuente publicado a través de AOSP, todavía queda una gran parte de Dalvik.
dalvik
art
5.0-lollipop
John
fuente
fuente
Respuestas:
Zygote no está realmente relacionado con Dalvik, es solo un proceso de inicio. Zygote es el método que usa Android para iniciar aplicaciones. En lugar de tener que comenzar cada nuevo proceso desde cero, cargar todo el sistema y el marco de Android de nuevo cada vez que desea iniciar una aplicación, realiza ese proceso una vez y luego se detiene en ese punto, antes de que Zygote haya hecho algo específico de la aplicación . Luego, cuando desea iniciar una aplicación, el proceso Zygote se bifurca y el proceso secundario continúa donde se quedó, cargando la aplicación en la VM.
Aunque este método fue diseñado originalmente para Dalvik, no hay razón para que ART no se comporte exactamente de la misma manera. No tiene que compilar aplicaciones JIT mientras se ejecutan, pero aún tiene muchas cosas Java independientes de la aplicación para cargar (es decir, todo el marco de Android), por lo que tiene sentido usar el mismo fork-when- Método cargado para iniciar nuevos procesos.
Es natural en un proyecto tan grande que haya otros sobrantes de Dalvik que todavía sean útiles en un mundo posterior a Dalvik, por lo que no debería sorprenderse de que haya otro código que originalmente se escribió para ser parte o para trabajar con Dalvik, que todavía está disponible para ART.
fuente