¿Cómo la VM Dalvik guarda y restaura sus registros entre las llamadas de método?

Semánticamente, la VM Dalvik tiene un nuevo conjunto de registros para cada método, y no tiene instrucciones para acceder a la pila de llamadas. Pero en términos de su implementación, los registros deben ser guardados de alguna manera en las llamadas de método y restaurados en las devoluciones de métodos. ¿Cómo hace (la implementación de Google de) Dalvik hacer esto?

    Los registros a los que se refiere el bytecode dalvik no son registros de máquinas en absoluto, sino que son realmente ubicaciones en la pila de llamadas. Cada vez que llama a un método, dalvik asigna suficiente memoria en el marco de pila de ese método para contener todos los registros que ese método necesita.

    Tenga en cuenta que no todos los cálculos modificarán el valor de la pila inmediatamente, el vm obviamente tiene que cargar los valores en un registro de la máquina para hacer los cálculos. Los resultados pueden guardarse en un registro de máquina para ser utilizados más tarde sin volver a escribirlo inmediatamente a la ubicación de la pila correspondiente, a discreción de la VM. Los valores se volverán a enviar a la pila de llamadas cuando sea necesario (es decir, cuando se llame a otro método, se utilicen varias construcciones de sincronización o se necesite el registro para otro cálculo, etc.).

    Aquí está el repositorio de código fuente para dalvik, puede explotar para encontrar la implementación. Fuente de androide

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.