我参考了以下oracle jvm doc

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

pop Operation弹出顶部操作数堆栈值

格式

pop形式pop = 87(0x57)

操作数堆栈...,值→

...

说明从操作数堆栈中弹出最高值。

除非value是a的值,否则不得使用pop指令
1类计算类型(第2.11.1节)。

pop2 操作弹出顶部一或两个操作数堆栈值

格式

pop2形式pop2 = 88(0x58)

操作数堆栈形式1:

...,值2,值1→

...

其中value1和value2均为类别1的值
计算类型(第2.11.1节)。

表格2:

...,值→

...

其中value是2类计算类型(第2.11.1节)的值。

说明从操作数堆栈中弹出最上面的一两个值。

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

最佳答案

用以下方法编写一个包含main方法的小型Java程序:

System.currentTimeMillis();

不要使用此调用的结果。然后字节码看起来像
INVOKESTATIC java/lang/System.currentTimeMillis()J
POP2
System.currentTimeMillis()将长值(64位,宽)放在堆栈上。但是,不再使用该堆栈内容,因此必须将其弹出,以便其他堆栈内容可以访问。 32位(普通大小)需要一个简单的POP,而64位(宽大小)则需要一个POP2

08-27 09:11