# 第二节 栈帧

# 1、栈帧存储的数据

方法在本次执行过程中所用到的局部变量、动态链接、方法出口等信息。

# 2、栈帧的结构

  • 局部变量表:方法执行时的参数、方法体内声明的局部变量
  • 操作数栈:存储中间运算结果,是一个临时存储空间
  • 帧数据区:保存访问常量池指针,异常处理表

# 3、典型案例

请预测下面代码打印的结果:34

int n = 10;
n += (n++) + (++n);
System.out.println(n);

实际执行结果:32

使用javap命令查看字节码文件内容:

D:\record-video-original\day03\code>javap -c Demo03JavaStackExample.class
Compiled from "Demo03JavaStackExample.java"
public class Demo03JavaStackExample{
public Demo03JavaStackExample();
Code:
0: aload_0
1: invokespecial #1 // Method java/lang/Object."<init>: ()V
4: return

public static void main(java.lang.String[]);
Code:
0: bipush 10
2: istore_1
3: iload_1
4: iload_1
5: iinc 1, 1
8: iinc 1, 1
11: iload_1
12: iadd
13: iadd
14: istore_1
15: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream;
18: iload_1
19: invokevirtual #3 // Method java/io/PrintStream.println:(I)V
22: return
}

内存执行过程分析:

images

上一节 回目录 下一节