Thread.sleep(100);
的Dalvik操作产生如下:
invoke-static {v2, v3}, Ljava/lang/Thread;.sleep:(J)V
这是一个静态方法,只接受一个参数,但给出了两个参数:v2和v3。这不奇怪吗? 有没有人对这种情况有所了解?
答案 0 :(得分:5)
不,它只需要一个长的参数。但是,使用两个寄存器 v2
和v3
传递 long。这是因为long
是64位值,因此它需要由Dalvik上的两个寄存器表示,它们将寄存器视为32位宽。 Dalvik VM技术指南在bytecode format guide:
当用于位值(例如整数和浮点数)时,寄存器被视为32位宽。相邻的寄存器对用于64位值。寄存器对没有对齐要求。
您可以告诉静态方法从方法签名中获取long
参数。 (J)V
表示它是一个采用long
参数(J
)并返回void(V
)的方法。
要阅读有关方法描述符的更多信息,请查看JVM规范,特别是section-4.3.3和section-4.3.2