Java字节码中stack = 1(或任何整数值)是什么意思

时间:2019-01-24 06:37:09

标签: java java-8 jvm bytecode javap

我一直试图了解以下Java代码的字节码如何工作。我找不到关于stack = 1和stack = 4部分含义的解释。

Java代码:

public class SimpleRecursion {

    public int factorial(int n) {
        if (n == 0) {
            return 1;
        }
        return n*factorial(n - 1);
    }

}

我编译了SimpleRecursion.java类,这是在SimpleRecursion.class上执行javap之后得到的:

默认构造函数字节码:(第5行中存在stack = 1)

public SimpleRecursion();
descriptor: ()V
flags: ACC_PUBLIC
Code:
  stack=1, locals=1, args_size=1
     0: aload_0
     1: invokespecial #1                  // Method java/lang/Object."<init>":()V
     4: return
  LineNumberTable:
    line 1: 0

阶乘方法的字节码:(第5行中有stack = 4)

public int factorial(int);
descriptor: (I)I
flags: ACC_PUBLIC
Code:
  stack=4, locals=2, args_size=2
     0: iload_1
     1: ifne          6
     4: iconst_1
     5: ireturn
     6: iload_1
     7: aload_0
     8: iload_1
     9: iconst_1
    10: isub
    11: invokevirtual #2                  // Method factorial:(I)I
    14: imul
    15: ireturn
  LineNumberTable:
    line 4: 0
    line 5: 4
    line 7: 6
  StackMapTable: number_of_entries = 1
    frame_type = 6 /* same */

stack = 1和stack = 4是什么意思?

更新: 看来还有一个类似的问题:

What does the `Stack=1, Locals=1, Args_size=1` Mean in Java Bytecode?

但是它不能回答以下问题:

编译器如何知道阶乘方法的堆栈上最多有4个对象?它会计算iload / aload指令的数量吗?

0 个答案:

没有答案