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

Pte*_*mys 8 android jvm computer-architecture dalvik vm-implementation

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

Jes*_*eke 5

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

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


kos*_*osa 0

这是 dalvik 的源代码存储库,您可以演练以查找实现。安卓源码