码迷,mamicode.com
首页 > 其他好文 > 详细

Jvm(59),虚拟机字节码执行引擎----运行时栈帧结构

时间:2018-09-22 23:13:04      阅读:237      评论:0      收藏:0      [点我收藏+]

标签:image   eth   col   虚拟   完全   执行引擎   附加   span   写入   

后面讲的所有的东西就是对前面所总览的虚拟机栈的进一步理解。

栈帧(Stack Frame)是用于支持虚拟机进行方法调用和方法执行的数据结构,它是虚拟机运行时数据区中的虚拟机栈(Virtual Machine Stack)[1]的栈元素。栈帧存储了方法的局部变量表、操作数栈、动态连接和方法返回地址等信息。每一个方法从调用开始至执行完成的过程,都对应着一个栈帧在虚拟机栈里面从入栈到出栈的过程。

每一个栈帧都包括了局部变量表、操作数栈、动态连接、方法返回地址和一些额外的附加信息。在编译程序代码的时候,栈帧中需要多大的局部变量表,多深的操作数栈都已经完全确定了,并且写入到方法表的Code属性之中[2],因此一个栈帧需要分配多少内存,不会受到程序运行期变量数据的影响,而仅仅取决于具体的虚拟机实现。

一个线程中的方法调用链可能会很长,很多方法都同时处于执行状态。对于执行引擎来说,在活动线程中,只有位于栈顶的栈帧才是有效的,称为当前栈帧(Current

StackFrame),与这个栈帧相关联的方法称为当前方法(Current Method)。执行引擎

运行的所有字节码指令都只针对当前栈帧进行操作,在概念模型上,典型的栈帧结构如图8-

1所示。

 

技术分享图片

Jvm(59),虚拟机字节码执行引擎----运行时栈帧结构

标签:image   eth   col   虚拟   完全   执行引擎   附加   span   写入   

原文地址:https://www.cnblogs.com/qingruihappy/p/9691484.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!