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 deberían guardarse de alguna manera en las llamadas a métodos y restaurarse en los retornos de métodos. ¿Cómo hace esto (la implementación de Google) a Dalvik?¿Cómo guarda y restaura la máquina virtual Dalvik sus registros entre llamadas a métodos?
Respuesta
Aquí está el repositorio fuente de dalvik, puede consultar la implementación de findout. android source
Los registros a los que se refiere bytecode dalvik no son registros de máquina en absoluto, pero en realidad son 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 inmediatamente el valor de la pila, obviamente la vm tiene que cargar los valores en un registro de la máquina para realizar los cálculos. Los resultados se pueden guardar en un registro de máquina para usarlo más tarde sin escribirlo de inmediato en la ubicación de la pila correspondiente, a discreción de la máquina virtual. Los valores se volverán a enviar a la pila de llamadas cuando sea necesario (es decir, cuando llame a otro método, use varias construcciones de sincronización o necesite el registro para otro cálculo, etc.).
- 1. ¿Cómo mejorarías Dalvik? La máquina virtual de Android
- 2. ¿Dónde guarda el servidor de desarrollo ASP.NET sus registros?
- 3. Única máquina virtual
- 4. ¿Cómo funciona una máquina virtual?
- 5. JSTL, Frijoles y llamadas a métodos
- 6. Cómo escribir una máquina virtual
- 7. ¿Dónde guarda ELMAH sus datos?
- 8. ¿Cómo agregar nuevos campos y registros a la base de datos de registros de llamadas (historial de llamadas)?
- 9. KVM api para iniciar la máquina virtual
- 10. ¿Dónde guarda Android los registros de cierre?
- 11. ¿Qué son los registros de llamadas y de llamadas guardadas?
- 12. ¿Cómo encuentro las llamadas a los métodos?
- 13. ¿Cómo puedo encadenar mis llamadas a métodos?
- 14. ¿Qué es Dalvik y dalvik-cache?
- 15. Identificación de CPU en la máquina virtual
- 16. Endianness de la máquina virtual de Java
- 17. ¿Cuál es la diferencia entre los archivos .class y .dex?
- 18. ¿Qué no puedes hacer en la VM Dalvik (máquina virtual de Android) que puedes en Sun VM?
- 19. de código abierto máquina virtual
- 20. Cómo hago dalvik aislado
- 21. Emulador AS400 o máquina virtual
- 22. ¿Métodos de extensión virtual?
- 23. Cómo verificar varias llamadas a métodos con Moq
- 24. Diagramas/referencias de la arquitectura de la máquina virtual Python
- 25. Llamadas a métodos de interceptación en Python
- 26. JMock Permitir otras llamadas a métodos
- 27. Interceptar llamadas a métodos en PHP
- 28. Guardar y reutilizar el bloque para llamadas a métodos
- 29. Cerrar sesión en una sesión SSH en la máquina virtual Erlang sin detener la máquina virtual ni dejar procesos obsoletos
- 30. Conectando a una máquina virtual de Vagrant externamente
¿Se puede acceder a la fuente de la implementación de Google Dalvik? También tenga en cuenta que existe una diferencia entre * código de bytes Dalvik * que no tiene acceso a una "pila de llamadas" y la * implementación * que ejecuta dicho código de bytes que no tiene dicho acceso. (Es * debe * tener alguna forma de mantener el estado; mire los contratos para llamadas a métodos como un comienzo ;-) –
Simplemente inserta el contexto anterior en su pila de llamadas internas cuando se ingresa un método y aparece cuando sale un método . –
@pst: Android es de código abierto, por supuesto, la fuente es accesible :) – JesusFreke