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

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

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

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

这是dalvik的源代码库,您可以通过演练来查找实现。 android源码