理解 JVM Stack 栈帧 Frame
前置知识 JVM运行时数据区 栈帧的组成 虚拟机栈 与 栈帧 虚拟机栈( JVM Stack ),由 栈帧 Frame 组成。 Frame - 每个方法对应一个栈帧, 包括以下部分: Local Variable Table (局部变量表) Operand Stack (操作数栈) 操作数栈( Operand Stack )也常称为操作栈,它是一个后入先出(Last In FirstOut,LIFO)栈。 同局部变量表一样,操作数栈的最大深度也在编译的时候写入到Code属性的max_stacks数据项中。 Dynamic Linking (动态链接) 动态链接是一个将符号引用解析为直接引用的过程。 return address (返回地址) a() -> b(),方法a调用了方法b, b方法的返回值放在什么地方 方法退出时会做的操作: 恢复上一个方法(调用者的栈帧)的 Local Variable Table (局部变量表)和 Operand Stack (操作数栈) 将返回的变量压入 上一个方法(调用者的栈帧)的 Operand Stack (操作数栈) 调整 Program Counter Register (PC, 程序计数器) 的值为 当前帧的返回地址 当前栈帧弹出 JVM Stack 栈, 执行 Program Counter Register (PC, 程序计数器