问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

jvm栈帧包含哪些内容

发布网友 发布时间:2022-04-25 16:32

我来回答

1个回答

热心网友 时间:2023-10-18 06:47

当线程执行到某个方法时就会往方线程栈中压入一个帧,称为栈帧,栈帧中包含了方法的局部变量表、操作数栈、返回地址、动态连接等信息
局部变量表:
顾名思义就是用来存储java方法中的局部变量的,在编译期间就会分配方法局部变量表的最大容量,局部变量表以变量槽为单位,每个变量槽可以存储32位及32位以下的变量,具体大小根据变量实际占用内存而定,java的基本类型中除了long和double外其他类型都是32位以下,所以每个变量占用一个变量槽即可,而对于long和double类的变量,会占用两个变量槽,除了基本类型当然还有引用类型,引用类型变量长度JVM并没有明确定义。JVM通过索引的方式来访问变量表中的变量,索引从0开始。变量槽是可以重复使用的,当变量槽所存储的变量已经不在其作用域后,该变量槽就可以被其他变量占用
操作数栈:
用于在方法运行时可以存放以及获取操作数,其所需要的最大栈深度也是在编译期间定下的,在方法刚开始运行时,操作数栈是空的,在方法执行过程中会有各种操作指令往操作数栈中压入和获取内容,也就是出栈/入栈操作,比如一个加法指令对两个数据进行相加,运行到这里前会先将两个数据压入栈中,然后将这两个操作数取出相加;在实际情况中,方法的操作数栈之间并不完全独立,往往会公用部分空间,这样在方法调用时就不需要进行参数复制了
动态连接:
前面说了常量池中会存储方法的符号引用,而每个栈帧中都会存储一个引用,用于指向常量池中该方法对应的符号引用,字节码指令中方法的调用就以方法对应的符号引用为参数来进行,在类加载阶段的解析步骤中,部分符号引用会被解析为直接引用,称为静态解析,在方法的运行过程中,另一部分符号引用会被实时的解析为直接引用,称为动态连接。
被静态解析的条件:方法在运行前就有一个可确定的调用版本,其实也就是编译期就刻意确定改方法有没有可能通过继承或者其他方式被重写,在java中静态方法(与类型直接关联),私有方法(外部不可访问),构造方法,父类方法,final方法,这五种方法的符号引用可以被静态解析都不可能被重写,可以在运行前确定唯一的调用版本,满足被静态解析的条件,称为非虚方法。
方法返回地址:
方法的运行过程中,可能会正常退出,也可能会异常退出,不论是哪种退出方式,在退出后都会要保证其上层调用者可以知道方法退出的位置,以便于程序继续执行,方法的返回地址就是用于确定退出位置的。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
电脑文件编辑好如何发送给微信如何把电脑上的文件发到微信上 笔记本电脑上的文件发送到微信怎么把电脑里的文件传到手机微信 我每天早晨吃米糊放白糖有害吗? 吃糖太多对我有好处么! 适合明年工作计划开头的句子 让人耳目一新的年度工作计划开头句子锦集五十四句 个人年度工作计划开头优美句子 让上司眼前一亮的工作计划开头语收藏四十一句 工作计划开头 怎么写工作计划开头 新干线0系电动列车的运行设备 java堆栈中数据怎么存放 在Java JVM里,如果一个变量被声明为final或者static, 那么这个变量的引 ... Java中数据存在哪里? JVM 常量池中存储的是对象还是引用 java中,静态方法被调用是,存储在内存的哪个区域?是栈?还是放大区?还是... java中成员变量都储存在栈内存中吗 jvm如何gc,新生代,老年代,持久代,都存储哪些东西 jvm方法区中存放的是什么东西 JVM的堆中到底存放的是什么? 是一个个具体的对象信息,还是真实表示对象的Class对象。 java线程存放在jvm的哪个区域?方法又存放在哪个区呢? 怎样用vivo的手机对一台苹果机定位 在java里,寄存器主要存储什么? vivo手机可以定位苹果手机吗 vivo手机丢失,如何用苹果手机定位vivo手机的位置 vivo手机定位苹果5C怎么定 我是vivo手机可不可以定位苹果手机 vivo手机怎么定位关机的苹果手机? 一个是苹果手机一个是vivo手机,怎么设置定位? vivo手机怎么定位苹果手机? 三清山的旅游信息 java中的对象是怎么存储的 程序显示在沙箱里不能运行,可是我不知道沙箱在哪,怎么把程序移出来 java中“栈”的存放和回收,java中是怎么控制对栈中内容的回收的呢,另外栈中的元素,实质是存放在哪里? 为什么360隔离沙箱运行不了指定程序 为什么地下城在360隔离沙箱中不能运行??? - 信息提示 为什么我电脑用了360隔离沙箱电脑任何东西都用不了. java中字符串池存放在内存的哪个区域? 在360隔离沙箱中运行提示有病毒这时候选择清理病毒程序就无法运行了,如何解决? 360隔离沙箱启动不了 墙面裂缝怎么处理? 为什么用360隔离沙箱使用不了软件,但是在桌面上使用点开了软件使用到登陆那里就自己不见了 软件在360隔离沙箱里面运行,显示“请关闭调试或监控工具后再试” 360隔离沙箱为啥不能运行PBB程序? 为什么我的电脑 所有软件进入了360隔离沙箱运行 有些软件需要在360隔离沙箱里运行时怎么回事? 怎么修补沙灰墙面裂缝步骤都有什么 360安全卫士隔离沙箱使用方法图文教程指引 为什么把360卸了之后,隔离沙箱里隔离了的软件不能用 室内墙壁裂缝有哪些好的修补方法