android - Dalvik VM 如何在方法调用之间保存和恢复其寄存器?

标签 android jvm dalvik computer-architecture vm-implementation

从语义上讲,Dalvik VM 对每个方法都有一组新的寄存器,并且没有访问调用堆栈的指令。但就其实现而言,寄存器应该在方法调用时以某种方式保存,并在方法返回时恢复。 Dalvik(Google 的实现)是如何做到这一点的?

最佳答案

dalvik 字节码引用的寄存器根本不是机器寄存器,但它们实际上是调用堆栈上的位置。每当您调用一个方法时,dalvik 都会在该方法的堆栈帧上分配足够的内存来保存该方法所需的所有寄存器。

请注意,并非所有计算都会立即修改堆栈上的值,vm 显然必须将值加载到机器寄存器中才能进行计算。结果可以保存在机器寄存器中以供以后使用,而无需立即将其写回相应的堆栈位置,由 VM 自行决定。如果需要,这些值将被刷新回调用堆栈(即,当您调用另一个方法、使用各种同步结构,或者它需要寄存器进行另一个计算等时)。

关于android - Dalvik VM 如何在方法调用之间保存和恢复其寄存器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8721628/

相关文章:

java - 当 JVM 执行 Java 应用程序时,操作系统的作用是什么?为什么我们需要操作系统?

android - 同步使用 ActionBarSherlock 和 ViewPagerIndicator 不会编译

android - .apk 没有官方格式规范吗?

android - 如何在 Android 应用程序中嵌入自定义街景?

android - 我不断收到验证错误 : client_id provided in the request does not match any of the registered clients

java - String pool在PermGen区或Heap的Object区创建

android - 在 android 4.4 ( NoClassDefFoundError ) 中运行时应用程序崩溃

Android Robotium - 如何使用机器人 Solo 类模拟日期选择器

android - helloandroid教程错误: request time failed

java - 如何更改Processing.exe的启动器参数?