java - jvm 中的 pop 和 pop2 指令有什么区别?

标签 java jvm

我引用了下面的oracle jvm doc

https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-6.html#jvms-6.5.pop

pop Operation Pop the top operand stack value

Format

pop Forms pop = 87 (0x57)

Operand Stack ..., value →

...

Description Pop the top value from the operand stack.

The pop instruction must not be used unless value is a value of a category 1 computational type (§2.11.1).

pop2 Operation Pop the top one or two operand stack values

Format

pop2 Forms pop2 = 88 (0x58)

Operand Stack Form 1:

..., value2, value1 →

...

where each of value1 and value2 is a value of a category 1 computational type (§2.11.1).

Form 2:

..., value →

...

where value is a value of a category 2 computational type (§2.11.1).

Description Pop the top one or two values from the operand stack.

“从操作数堆栈中弹出顶部的一两个值”是什么意思?使用 pop2 时的示例是什么?

最佳答案

编写一个包含 main 方法的小 java 程序

System.currentTimeMillis();

不要使用此调用的结果。然后字节码看起来像

INVOKESTATIC java/lang/System.currentTimeMillis()J
POP2

System.currentTimeMillis() 将长值(64 位,宽)放入堆栈。然而,这个堆栈内容不再被使用,所以它必须被弹出,以便其他堆栈内容可以访问。 32 位(正常大小)需要一个简单的 POP,64 位(宽大小)需要一个 POP2

关于java - jvm 中的 pop 和 pop2 指令有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50448093/

相关文章:

java - 从文本字段输入中过滤 JList

Java 泛型 - 为什么 new Money<Dollar>(4.0) === new Money<Franc>(4.0) 相等?

java - 为什么为 Java VM 编写了这么多新语言?

java - 如何向 jar 文件发出 httprequest

java - 安卓工作室错误 :Unable to start the daemon process

java - web.xml 安全约束配置不考虑 URL 查询字符串

java - 打印所有 JVM 标志

java - 从 Visual Studio 外部创建 JVM 崩溃

java - 动态加载的 JAR/等。在同一个 JVM 容器中

java - 如何将自定义 SSLSocketFactory 注入(inject) Azure Java SDK