Dalvik 操作的Thread.sleep(100);
产生如下:
invoke-static {v2, v3}, Ljava/lang/Thread;.sleep:(J)V
这是一个静态方法,接受一个参数,但有两个参数:v2 和 v3。是不是很奇怪?有人知道这种情况吗?
不,它只需要一个很长的论点。然而long 是使用两个寄存器 v2
和v3
. 这是因为 along
是 64 位值,因此它需要由 Dalvik 上的两个寄存器表示,这认为寄存器是 32 位宽的。Dalvik VM 技术指南在字节码格式指南中提到了这一点:
当用于位值(例如整数和浮点数)时,寄存器被认为是 32 位宽。相邻寄存器对用于 64 位值。寄存器对没有对齐要求。
您可以看出静态方法正在long
从方法签名中获取参数。这(J)V
意味着它是一个接受long
参数 ( J
) 并返回 void ( V
) 的方法。