我参考了以下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
。