上篇讲到栈帧,现在我们需要了解栈帧的执行过程,那就涉及到反编译字节码。
一. 反编译代码
(1)源代码
/**
* 编译:javac com\jvm\StackFrame.java
* 反编译:javap -p -v com\jvm\StackFrame.class
*/
public class StackFrame {
public static void main(String[] args) {
add(1, 2);
}
private static int add(int a, int b) {
int c = 0;
c = a + b;
return c;
}
}
(2)反编译后的字节码,不懂没关系,接下来进行字节码解释。
{
public com.jvm.StackFrame();
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 7: 0
public static void main(java.lang.String[]);
descriptor: ([Ljava/lang/String;)V
flags: ACC_PUBLIC, ACC_STATIC
Code:
stack=2, locals=1,