从语义上讲,Dalvik VM为每种方法都有一组新的寄存器,并且没有访问调用堆栈的指令。但就其实现而言,寄存器应以某种方式保存在方法调用上并在方法返回时恢复。 Dalvik(谷歌的实施)如何做到这一点?
答案 0 :(得分:5)
dalvik字节码所指的寄存器根本不是机器寄存器,但它们实际上是调用堆栈上的位置。无论何时调用方法,dalvik都会在该方法的堆栈帧上分配足够的内存来保存该方法所需的所有寄存器。
请注意,并非所有计算都会立即修改堆栈上的值,因此vm显然必须将值加载到计算机寄存器中才能进行计算。结果可以保存在机器寄存器中以便稍后使用,而不是立即将其写回到相应的堆栈位置,由VM决定。如果需要,值将被刷回到调用堆栈中(即,当您调用另一个方法时,使用各种同步构造,或者它需要寄存器进行另一次计算等)。
答案 1 :(得分:1)
这是dalvik的源存储库,您可以通过演练找到实现。 android source