Java虚拟机之栈帧
简述 栈帧(Stack Frame)是用于支持虚拟机进行方法调用和方法执行的数据结构。它是虚拟机运行时数据区中的虚拟机栈的栈元素。 栈帧存储了方法的 局部变量表 、 操作数栈 、 动态链接 和 方法返回地址 等信息。 总的来看,其结构大概如下图黄色区域那样。 在单个线程中,每一个调用方法jvm都会为其分配一个栈帧。上图中,main方法中包含一个栈帧,然后在main方法里面调用了computer()方法,然后这个computer()方法也会含有自己的栈帧。另外每个栈帧内部都含有自己的局部变量表、操作数栈、动态链接、方法返回地址等信息。 局部变量表 局部变量表是一组变量值存储空间,用于存放方法参数和方法内部定义的局部变量。在Java程序编译为Class文件时,就在方法表的Code属性的max_locals数据项中确定了该方法需要分配的最大局部变量表的容量。在方法执行时,虚拟机是使用局部变量表完成参数变量列表的传递过程,如果是实例方法,那么局部变量表中的每0位索引的Slot默认是用于传递方法所属对象实例的引用,在方法中可以通过关键字“this”来访问这个隐含的参数,其余参数则按照参数列表的顺序来排列,占用从1开始的局部变量Slot,参数表分配完毕后,再根据方法体内部定义的变量顺序和作用域来分配其余的Slot。局部变量表中的Slot是可重用的,方法体中定义的变量