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

标签 android jvm dalvik computer-architecture vm-implementation

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

最佳答案

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

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

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

相关文章:

java - Java 是否保证 Object.getClass() == Object.getClass()?

java - 如何在运行时获取远程java类文件字节流?

android - 在 Android 中无法处理 "javax/xml/XMLConstants.class"

java - Android应用设备体积

android - 休息 API Android 应用程序

garbage-collection - Oracle或OpenJDK中GC的集合类型是精确的还是保守的?

java - 如何使用 org.jf.dexlib2 获取 dexfile 中指令的字节码

java - 自动更改/检测 Android 应用程序的源代码

java - 如何在我的 android 应用程序中修复 INSTALL_PARSE_FAILED_MANIFEST_MALFORMED

java - 如何在声明上下文上使用 onDismiss 方法?