我参考了下面的oracle jvm 文档
\n\nhttps://docs.oracle.com/javase/specs/jvms/se7/html/jvms-6.html#jvms-6.5.pop
\n\n\n\n\npop操作 弹出栈顶操作数的值
\n\n格式
\n\n弹出表单 弹出 = 87 (0x57)
\n\n操作数堆栈...,值\xe2\x86\x92
\n\n...
\n\n描述 从操作数栈中弹出顶部值。
\n\n除非 value 是类别 1 计算类型 (\xc2\xa72.11.1) 的值,否则不得使用 pop 指令。
\n\npop2操作 弹出操作数栈顶部的一个或两个值
\n\n格式
\n\npop2 形式 pop2 = 88 (0x58)
\n\n操作数堆栈形式 1:
\n\n..., 值2, 值1 \xe2\x86\x92
\n\n...
\n\n其中 value1 和 value2 都是类别 1\n 计算类型 (\xc2\xa72.11.1) 的值。
\n\n表格2:
\n\n...,值 \xe2\x86\x92
\n\n...
\n\n其中 value 是类别 2 计算类型的值 (\xc2\xa72.11.1)。
\n\n说明 从操作数堆栈中弹出顶部的一个或两个值。
\n
“从操作数堆栈中弹出前一个或两个值”是什么意思?使用 pop2 时的示例是什么?
\n编写一个包含 main 方法的小型 java 程序
System.currentTimeMillis();
Run Code Online (Sandbox Code Playgroud)
不要使用此调用的结果。然后字节码看起来像
INVOKESTATIC java/lang/System.currentTimeMillis()J
POP2
Run Code Online (Sandbox Code Playgroud)
System.currentTimeMillis()将一个长值(64 位,宽)放入堆栈。然而,该堆栈内容不再使用,因此必须将其弹出,以便可以访问其他堆栈内容。32 位(正常大小)需要一个 simple POP,64 位(宽大小)需要一个POP2.
| 归档时间: |
|
| 查看次数: |
1049 次 |
| 最近记录: |