java - Thread.sleep() 的 Dalvik 操作

标签 java android jvm dalvik smali

Thread.sleep(100); 的 Dalvik 操作如下所示:

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

这是一个静态方法,接受一个参数,但给出两个参数:v2 和 v3。是不是很奇怪? 有人知道这种情况吗?

最佳答案

不,它只需要一个很长的参数。然而,long 是使用两个寄存器 v2v3 传递的。这是因为 long 是一个 64 位值,因此它需要由 Dalvik 上的两个寄存器表示,Dalvik 认为寄存器是 32 位宽。 Dalvik VM 技术指南在 bytecode format guide 中提到了这一点:

When used for bit values (such as integers and floating point numbers), registers are considered 32 bits wide. Adjacent register pairs are used for 64-bit values. There is no alignment requirement for register pairs.

您可以看出静态方法从方法签名中获取一个 long 参数。 (J)V 表示它是一个接受long 参数(J)并返回void(V).

要阅读有关方法描述符的更多信息,请查看 JVM 规范,特别是 section-4.3.3section-4.3.2

关于java - Thread.sleep() 的 Dalvik 操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19011263/

相关文章:

java - JScrollPane 不可见

java - 在没有源代码的已编译 1.6 Java 类中更改整数字段的最佳方法

java - appium 中的 TouchAction 类要求提供诸如 <T extends TouchActions> 之类的参数,有人可以举例说明如何实例化它

java - 从正在运行的 java 程序的内存中定位并读取特定类型的对象

performance - 如何在 Scala 中近似数据结构的大小?

java - 编程: open 2 popup windows with one click

android - 如何在kivy中像youtube一样播放来自网络的视频

Android:将 Canvas 绘制到 View

android - 怎么修? "ERROR: : Could not find any version that matches com.android.support:appcompat-v7:29.+."

r - xlConnect R 使用 JVM 内存