美文网首页
java虚拟机第八章之运行时栈桢结构

java虚拟机第八章之运行时栈桢结构

作者: 水与火相容 | 来源:发表于2017-09-21 21:09 被阅读0次

            栈桢是用于虚拟机进行方法调用和方法执行时的数据结构,它是虚拟机运行时数据区虚拟机栈的栈元素。栈元素存储了方法的局部变量表,操作数栈,动态连接和方法返回地址等信息。每一个方法在执行时都对应着一个栈桢在虚拟机栈里面从入栈到出栈的过程。

            在编译代码的时候,栈桢中需要多大的局部变量表,操作数栈的深度已经确认。在活动栈桢中,只有位于栈顶的栈桢才是有效的,称为当前栈桢,与这个栈桢对应的方法称为当前方法。

    (1)局部变量表

    局部变量表是一组变量值存储空间,用于存放方法参数和方法内部定义的局部变量,局部变量表以变量槽为最小单位,每个变量槽都能够存放一个boolean,byte,char,short,int,float,reference,returnAddress类型的数据,这八种数据类型,都可以使用32位或更小的物理内存来存放。允许shot随着操作系统或虚拟机的不同而变化。

    (2)操作数栈

    操作数栈的深度在编译时确定,操作数栈的每一个元素可以是任意类型的Java数据类型,包括long和double,32位数据类型所占的栈容量为1,64位为2。方法的执行过程中。会有各种字节码指令往操作数栈中写入和提取内容,也就是入栈出栈操作。

    (3)动态连接

    每个栈桢都包含一个指向运行时常量池中该栈桢所属方法的引用,持有这个引用是为了支持方法调用过程中的动态连接。

    (4)方法返回地址

    方法退出过程实际上就等同于把当前栈桢出栈,因此退出时可能执行的操作有:恢复上层方法的局部变量表和操作数栈,把返回值压入调用者栈桢的操作数栈中,调用PC计数器的值以指向方法调用指令后面的一条指令等。

    相关文章

      网友评论

          本文标题:java虚拟机第八章之运行时栈桢结构

          本文链接:https://www.haomeiwen.com/subject/oswtextx.html