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