为什么 Dalvik 基于寄存器,但使用堆栈,有什么区别?
Why Dalvik register-based, but use stack, what is differnce?
很多文章都说 Dalvik 是基于寄存器的 VM,但也有很多文章说 Dalvik 在线程中使用堆栈来保存方法和缓存变量。也许我将此与保持 类、变量和方法与在处理器上执行实际操作混淆了。我认为这意味着 VM 在堆栈或寄存器中发送操作。但是找不到这些信息。请帮忙?)
区别在于是否使用“操作数堆栈”。在 JVM 中,变量只能通过 pushing/popping 它们的值 to/from 操作数堆栈来传递。在这种情况下,当值存在于操作数堆栈中时,它们就成为操作数。要调用一个方法,所有的参数都必须在操作数栈上。要将两个数相加,两个数都必须在操作数堆栈上,依此类推
对于没有操作数堆栈的 VM,将变量传递给方法需要在操作中显式编码 variable/register 数字。这通常会产生更好的性能,但与使用操作数堆栈的设计相比,编码操作的总体大小往往更大。
如果希望将操作编译为机器码,那么是否使用操作数栈并不会真正影响性能,因为涉及很多转换。
很多文章都说 Dalvik 是基于寄存器的 VM,但也有很多文章说 Dalvik 在线程中使用堆栈来保存方法和缓存变量。也许我将此与保持 类、变量和方法与在处理器上执行实际操作混淆了。我认为这意味着 VM 在堆栈或寄存器中发送操作。但是找不到这些信息。请帮忙?)
区别在于是否使用“操作数堆栈”。在 JVM 中,变量只能通过 pushing/popping 它们的值 to/from 操作数堆栈来传递。在这种情况下,当值存在于操作数堆栈中时,它们就成为操作数。要调用一个方法,所有的参数都必须在操作数栈上。要将两个数相加,两个数都必须在操作数堆栈上,依此类推
对于没有操作数堆栈的 VM,将变量传递给方法需要在操作中显式编码 variable/register 数字。这通常会产生更好的性能,但与使用操作数堆栈的设计相比,编码操作的总体大小往往更大。
如果希望将操作编译为机器码,那么是否使用操作数栈并不会真正影响性能,因为涉及很多转换。