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 de 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 zygote aún se está ejecutando. Si realmente se deshicieron de la VM de Dalvik, ¿no haría eso que el proceso de cigoto fuera inútil? Además, al inspeccionar el código fuente publicado a través de AOSP, aún queda una gran parte de Dalvik.
Zygote no está realmente relacionado con Dalvik, es solo un proceso de inicio. Zygote es el método que utiliza Android para iniciar aplicaciones. En lugar de tener que iniciar 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 de Zygote se bifurca y el proceso secundario continúa donde lo dejó, cargando la aplicación en la máquina virtual.
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 todavía tiene muchas cosas de Java independientes de la aplicación para cargar (es decir, todo el marco de trabajo de Android), por lo que tiene sentido usar la misma bifurcación cuando: método cargado para iniciar nuevos procesos.
Es natural que en un proyecto tan grande haya otros sobrantes de Dalvik que aún son útiles en un mundo posterior a Dalvik, por lo que no debería sorprenderse de que haya otro código que se escribió originalmente para ser parte de o para trabajar con Dalvik, que todavía está disponible para que ART lo use.
b̶i̶t̶c̶o̶d̶e̶
-> bytecode
. D̶a̶l̶v̶i̶k̶V̶M̶
-> ART's Interpreter
. DalvikVM
no se usa Pero su intérprete y JIT se fusionan en ART
.Dalvik bytecode
(Oracle toma el código de bytes de Java) y lo transforma. Un APK contiene solo el código de bytes dalvik, y cuando dex2oat
lo compila, los filtros deciden qué AOT (y en tiempo de ejecución, los perfiles deciden qué JIT).
RossC
izzy