什么是栈帧?
正如大家所了解的, Java 虚拟机的内存区域被划分为程序计数器, 虚拟机栈, 本地方法栈, 堆和方法区.(什么? 你还不知道, 赶紧去看看《Java 虚拟机内存结构及编码实战》 https://mp.weixin.qq.com/s/izbCCfOlw0-mcnOqpc3WKw )这次要介绍的栈帧 (Stack Frame), 就是 Java 虚拟机中的虚拟机栈(Virtual Machine Stack) 的基本元素, 它也是用于支持 Java 虚拟机进行方法调用和方法执行背后的数据结构, 了解了它就可以更好地理解 Java 虚拟机执行引擎是如何运行的.
每一个方法从调用开始至执行结束的整个过程, 都对应着一个栈帧在虚拟机栈中从入栈到出栈的过程. 栈帧存储了方法的局部变量表, 操作数栈, 动态连接和方法返回地址等信息, 在同一时刻, 同一条线程中, 只有位于栈顶的方法才是在运行的, 只有位于栈顶的栈帧才是生效的, 执行引擎所运行的所有字节码指令都只针对当前栈帧进行操作. 虚拟机栈和栈帧的总体结构如下图:
接下来, 再分别介绍一下栈帧中的局部变量表, 操作数栈, 动态连接, 方法返回地址等各个部分的作用和数据结构.
- public class OneMoreStudy {
- public static void main(String[] args) {
- int i;
- System.out.println(i);
- }
- }
来源: https://www.cnblogs.com/heihaozi/p/12174443.html