2013-09-25 4 views
2

операция Dalvik для Thread.sleep(100); производится, как показано ниже:операция Dalvik для Thread.sleep()

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

Это статический метод и принимает один аргумент, но два заданных: v2 и v3. Разве это не странно? Есть ли у кого-нибудь идеи об этой ситуации?

ответ

5

Нет, требуется только один аргумент, который является длинным. Однако длина передается с использованием двух регистровv2 и v3. Это связано с тем, что 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

+1

Вот соответствующая информация Dalvik-конкретны: http://s.android.com/tech/dalvik/dex-format .html – JesusFreke

Смежные вопросы