¿Qué sigue haciendo el proceso cigoto en Android L?

13

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.

John
fuente
1
Difícil de saber, es un lanzamiento de desarrollador y LEJOS de completo. Hay un montón de Kitkat / Jellybean cosido en él en este momento solo para que funcione y arranque.
RossC
Siendo todavía una " vista previa del desarrollador ", de hecho podría no tener mucho sentido especular (aunque sigo la explicación de Dan). Podría ser como lo describió Dan, o podría ser un "sobrante" aún no "completamente obsoleto". Cuando todavía se ejecuta en L-Release, eso es algo diferente.
Izzy

Respuestas:

14

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.

Dan Hulme
fuente
Coincide con mi comprensión de Zygote (ser un no desarrollador). Desde la "vista de usuario", probablemente sea más fácil pensar en Zygote como "servidor de aplicaciones", actuando como una "capa de abstracción" entre las aplicaciones y el sistema operativo (de alguna manera, como HAL hace para abstraer hardware): no importa ¿Qué es "debajo" (Dalvik o ART), la interfaz trata con "cosas"?
Izzy
1
Puede que sea más fácil pensar en Zygote como un servidor de aplicaciones, pero no es una descripción muy precisa. Es solo la parte del sistema operativo que inicia las aplicaciones, y está muy del lado del sistema operativo del límite del sistema operativo de la aplicación.
Dan Hulme
Gracias, así que al menos mi "comprensión básica" fue correcta (estoy consciente de que el "servidor de aplicaciones" no es exacto, pero es más fácil de entender para un "usuario normal", así que hagámoslo " servicio de aplicaciones " para ampliarlo del lado del sistema operativo;)
Izzy
Lo que existe en el código fuente no son "sobras", ¡y no estamos en la era posterior a Dalvik! El código de bits Dalvik sigue siendo el IR que se utiliza. Incluso con la configuración más alta, no todo está compilado por AOT, y todavía hay algunas cosas que deben interpretarse. Entonces, para estos, está DalvikVM . Además, los dispositivos con poco almacenamiento utilizarán menos AOT más interpretación. Por último, el cigoto incluye montones de clases de uso frecuente, que pueden ahorrar espacio ya que pueden compartirse entre múltiples aplicaciones.
Paschalis
@Paschalis estás confundiendo JIT compilando con DalvikVM. El hecho de que las versiones más recientes de la compilación ART do JIT (justo a tiempo) no signifique que Dalvik todavía está presente. Oracle Java también hace compilación JIT, no significa que use Dalvik
Martin Konecny