JVM虚拟机-虚拟机栈帧栈结构

本文详细介绍了JVM虚拟机栈中的栈帧结构,包括局部变量表、操作数栈、动态链接、返回地址和附加信息。栈帧在方法调用和执行过程中起到关键作用,存储方法的局部变量、执行操作和动态链接信息。局部变量表用于存储参数和局部变量,操作数栈则是执行算术运算和方法调用时的重要数据区域。动态链接用于方法调用的动态连接,返回地址记录方法返回的信息。此外,栈帧可能还包括虚拟机实现特定的附加信息。
摘要由CSDN通过智能技术生成

1.虚拟机栈(VM Stack)结构图

目录

1.虚拟机栈(VM Stack)结构图

2.虚拟机栈帧栈是什么?

3.栈帧的组成

3.1局部变量表

3.2操作数栈

3.3动态链接

3.4返回地址

3.5附加信息

4.方法执行过程栈的情况


2.虚拟机栈帧栈是什么?

虚拟机用来进行方法调用和方法执行的数据结构,它是虚拟机运行时数据区的虚拟机栈(Virtual Machine Stack)的栈元素。

3.栈帧的组成

栈帧存储了方法的局部变量表,操作数栈,动态连接和方法返回地址等信息。第一个方法从调用开始到执行完成,就对应着一个栈帧在虚拟机栈中从入栈到出栈的过程。

        每一个栈帧都包括了局部变量表,操作数栈,动态连接,方法返回地址和一些额外的附加信息。在编译代码的时候,栈帧中需要多大的局部变量表,多深的操作数栈都已经完全确定了,并且写入到了方法表的Code属性中,因此一个栈帧需要分配多少内存,不会受到程序运行期变量数据的影响,而仅仅取决于具体虚拟机的实现。
        一个线程中的方法调用链可能会很长,很多方法都同时处理执行状态。对于执行引擎来讲,活动线程中,只有虚拟机栈顶的栈帧才是有效的,称为当前栈帧(Current Stack Frame),这个栈帧所关联的方法称为当前方法(Current Method)。执行引用所运行的所有字节码指令都只针对当前栈帧进行操作。栈帧的概念结构如下图所示:

3.1局部变量表

局部变量表作用是什么?

局部变量表是一组变量值存储空间,用于存放方法参数和方法内部定义的局部变量。在Java程序编译为Class文件时,就在方法表的Code属性的max_locals数据项中确定了该方法需要分配的最大局部变量表的容量。

局部变量表结构是什么?

局部变量表 = 变量槽 * n(即多个变量槽构成)

1).一个变量槽存放一个32位以内的数据类型:char,int ,bit,boolean,float,short,reference,returnAddress

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值