Thread.sleep(100);
的 Dalvik 操作如下所示:
invoke-static {v2, v3}, Ljava/lang/Thread;.sleep:(J)V
这是一个静态方法,接受一个参数,但给出两个参数:v2 和 v3。是不是很奇怪? 有人知道这种情况吗?
最佳答案
不,它只需要一个很长的参数。然而,long 是使用两个寄存器 v2
和 v3
传递的。这是因为 long
是一个 64 位值,因此它需要由 Dalvik 上的两个寄存器表示,Dalvik 认为寄存器是 32 位宽。 Dalvik VM 技术指南在 bytecode format guide 中提到了这一点:
When used for bit values (such as integers and floating point numbers), registers are considered 32 bits wide. Adjacent register pairs are used for 64-bit values. There is no alignment requirement for register pairs.
您可以看出静态方法从方法签名中获取一个 long
参数。 (J)V
表示它是一个接受long
参数(J
)并返回void(V
).
要阅读有关方法描述符的更多信息,请查看 JVM 规范,特别是 section-4.3.3和 section-4.3.2
关于java - Thread.sleep() 的 Dalvik 操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19011263/