2
为Thread.sleep(100);
的Dalvik操作产生象下面这样:为了Thread.sleep的Dalvik操作()
invoke-static {v2, v3}, Ljava/lang/Thread;.sleep:(J)V
这是一个静态方法和带有一个参数,但两个给定:v2和v3。这不奇怪吗? 有没有人有关于这种情况的想法?
为Thread.sleep(100);
的Dalvik操作产生象下面这样:为了Thread.sleep的Dalvik操作()
invoke-static {v2, v3}, Ljava/lang/Thread;.sleep:(J)V
这是一个静态方法和带有一个参数,但两个给定:v2和v3。这不奇怪吗? 有没有人有关于这种情况的想法?
不,它只需要一个参数很长。然而,长通过使用两个寄存器v2
和v3
。这是由于long
是一个64位的值,因此它需要由Dalvik上的两个寄存器来表示,该寄存器将寄存器视为32位宽。 Dalvik VM技术指南在bytecode format guide中提到了这一点:
当用于位值(例如整数和浮点数)时,寄存器被认为是32位宽。相邻的寄存器对用于64位值。寄存器对没有对齐要求。
您可以知道静态方法采用方法签名的参数long
。 (J)V
表示这是一个采用参数long
并返回void(V
)的方法。
想了解更多关于方法的描述看看JVM规范,特别是section-4.3.3和section-4.3.2
这里有相应的具体的Dalvik-信息:http://s.android.com/tech/dalvik/dex-format html的 – JesusFreke