2

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

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

这是一个静态方法,接受一个参数,但有两个参数:v2 和 v3。是不是很奇怪?有人知道这种情况吗?

4

1 回答 1

6

不,它只需要一个很长的论点。然而long 是使用两个寄存器 v2v3. 这是因为 along是 64 位值,因此它需要由 Dalvik 上的两个寄存器表示,这认为寄存器是 32 位宽的。Dalvik VM 技术指南在字节码格式指南中提到了这一点:

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

您可以看出静态方法正在long从方法签名中获取参数。这(J)V意味着它是一个接受long参数 ( J) 并返回 void ( V) 的方法。

要了解有关方法描述符的更多信息,请查看 JVM 规范,特别是第 4.3.3节和第 4.3.2 节

于 2013-09-25T17:34:10.170 回答