JVM中的每一个线程拥有一个运行时栈。和汇编语言一样,该栈被分为若干个栈帧。但是,接下来就和汇编语言不同了。
JVM的栈帧包含一个局部变量表,操作数栈,动态链接,和返回地址。
局部变量表
局部变量表是一组变量值存储空间,用于存放方法参数和方法内部定义的局部变量。在Java程序被编译成Class文件时,就在方法的Code属性的max_locals数据项中确定了该方法所需要分配的最大局部变量表的容量。
操作数栈
ava虚拟机的解释执行引擎被称为”基于栈的执行引擎”,其中所指的栈就是指-操作数栈。操作数栈也常被称为操作栈。和局部变量区一样,操作数栈也是被组织成一个以字长为单位的数组。但是和前者不同的是,它不是通过索引来访问,而是通过标准的栈操作—压栈和出栈—来访问的。比如,如果某个指令把一个值压入到操作数栈中,稍后另一个指令就可以弹出这个值来使用。
动态连接
class文件中存在着大量的符号引用。只有父类方法,静态方法,私有方法,实例构造器可以在代类加载时转化为直接引用。而其他则必须在每一次使用进行一次解析。