栈桢是用于支持虚拟机进行方法调用和方法执行的数据结构,它是虚拟机运行时数据区中的虚拟机栈的栈元素。栈桢存储了方法的局部变量表
、操作数栈
、动态链接
和方法返回地址
等信息。
局部变量表
局部变量表是一组变量存储空间,用于存储方法参数和方法内部定义的局部变量。容量单位为Slot
操作数栈
操作数栈也常称为操作栈,它是一个后入先出栈。
动态连接
每个栈桢都包含一个指向运行时常量池中该栈桢所属方法的引用,持有这个引用是为了支持方法调用过程中的动态连接。符号引用一部分会在类加载阶段或者第一次使用时候就转化为直接引用,这种转化称为静态解析。另外一部分将在每一次运行时期间转化为直接引用,这部分称为动态连接。
方法返回地址
当一个方法开始执行后,只有两种方式可以退出该方法:
1、执行引擎遇到任意一个方法返回的字节码指令。
2、在方法执行过程中遇到了异常,并且这个异常没有在方法体内得到处理。
无论哪种方式退出,都需要要回到方法被调用的地方,程序才能继续执行,方法返回时可能需要在栈桢中保存一些信息,用于帮助恢复它的上层方法的执行状态。