pop指令

pop指令

pop指令 #

pop指令则常用于舍弃调用指令的返回结果。例如在下面这段代码的 foo 方法中,我将调用静态方法 bar,但是却不用其返回值。

由于对应的 invokestatic 指令仍旧会将返回值压入 foo 方法的操作数栈中,因此 Java 虚拟机需要额外执行 pop 指令,将返回值舍弃。

public static boolean bar() {
  return false;
}
public void foo() {
  bar();
}
// foo方法对应的字节码如下:
public void foo();
  0  invokestatic FooTest.bar() : boolean [24]
  3  pop
  4  return

需要注意的是,上述两条指令只能处理非 long 或者非 double 类型的值,这是因为 long 类型或者 double 类型的值,需要占据两个栈单元。当遇到这些值时,我们需要同时复制栈顶两个单元的 dup2 指令,以及弹出栈顶两个单元的 pop2 指令。

Viewpoint #

From #

19 | Java字节码(基础篇)