Thread.sleep()的Dalvik操作

时间:2013-09-25 17:17:36

标签: java android jvm dalvik smali

Thread.sleep(100);的Dalvik操作产生如下:

invoke-static {v2, v3}, Ljava/lang/Thread;.sleep:(J)V

这是一个静态方法,只接受一个参数,但给出了两个参数:v2和v3。这不奇怪吗? 有没有人对这种情况有所了解?

1 个答案:

答案 0 :(得分:5)

不,它只需要一个长的参数。但是,使用两个寄存器 v2v3传递 long。这是因为long是64位值,因此它需要由Dalvik上的两个寄存器表示,它们将寄存器视为32位宽。 Dalvik VM技术指南在bytecode format guide

中提到了这一点
  

当用于位值(例如整数和浮点数)时,寄存器被视为32位宽。相邻的寄存器对用于64位值。寄存器对没有对齐要求。

您可以告诉静态方法从方法签名中获取long参数。 (J)V表示它是一个采用long参数(J)并返回void(V)的方法。

要阅读有关方法描述符的更多信息,请查看JVM规范,特别是section-4.3.3section-4.3.2