首页 > 其他分享 >【jvm】栈帧的内部结构

【jvm】栈帧的内部结构

时间:2024-08-26 20:56:53浏览次数:10  
标签:操作数 虚拟机 局部变量 数据类型 内部结构 jvm 方法 栈帧

目录

1. 说明
  • 1.JVM(Java虚拟机)栈帧的内部结构是虚拟机栈中的一个重要概念,它用于支持虚拟机进行方法调用和执行。
  • 2.每个方法从调用到执行完成的过程,都对应着一个栈帧在虚拟机栈中从入栈到出栈的过程。
  • 3.栈帧中存储了方法执行过程中的各种数据信息。
  • 4.每个栈帧都有自己的大小,且各个栈帧的大小可能不同,这取决于里面存储的数据的大小。
  • 5.在多线程环境下,每个线程都有自己的虚拟机栈,栈中存储的是各自的栈帧,它们之间互不影响。
  • 6.总的来说,JVM栈帧的内部结构是虚拟机进行方法调用和执行的基础,它通过局部变量表、操作数栈、动态链接、方法返回地址等部分,维系着方法执行过程中的各种数据信息。
2. 局部变量表(Local Variables)
  • 1.局部变量表是栈帧中非常重要的一部分,它主要用于存储方法参数和定义在方法体内的局部变量
  • 2.局部变量表所需的容量大小在编译期就确定下来,并保存在方法的Code属性的maximum local variables数据项中。
  • 3.局部变量表是线程私有的,因此不存在线程安全问题。
  • 4.局部变量表中的变量只在当前方法调用中有效,方法执行结束后,随着方法栈帧的销毁,局部变量表也会随之销毁。
  • 5.局部变量表的基本存储单元是Slot(变量槽),一个Slot可以存放一个32位以内的数据类型(包括boolean、byte、char、short、int、float、reference)。
  • 6.对于64位的数据类型(long和double),虚拟机会以高位对齐的方式为其分配两个连续的Slot空间。
3. 操作数栈(Operand Stack)
  • 1.操作数栈是一个后进先出(LIFO)栈,主要用于保存计算过程的中间结果,同时作为计算过程中变量临时的存储空间。
  • 2.在方法执行过程中,会有各种字节码指令往操作数栈中写入和提取内容,即入栈和出栈操作。
  • 3.操作数栈所需的最大深度在编译期就确定下来,并保存在方法的Code属性的max_stacks项中。
  • 4.操作数栈中的元素可以是任意的Java数据类型,32位数据类型在栈中占一个单位深度,64位数据类型占两个单位深度。
4. 动态链接(Dynamic Linking)
  • 1.每个栈帧都包含一个指向运行时常量池中该栈帧所属方法的引用,此引用用于支持方法调用过程中的动态链接。
  • 2.动态链接将Class文件中常量池的符号引用转为直接引用,这个过程在方法运行期间进行。
5. 方法返回地址(Return Address)
  • 1.方法返回地址也被称为方法退出或者异常退出的定义,它存储了方法执行完成后,返回到哪个位置继续执行的信息。
  • 2.无论是正常的方法返回还是异常的方法返回,都需要恢复到上层方法的执行状态,继续执行。
6. 附加信息
  • 1.除了上述几个主要部分外,栈帧还可能包含一些附加信息,如线程的私有数据、监控和调试信息等。

标签:操作数,虚拟机,局部变量,数据类型,内部结构,jvm,方法,栈帧
From: https://blog.csdn.net/qq_32088869/article/details/141563886

相关文章

  • JVM-内存结构(超详细)
    目录程序计数器(PC寄存器)定义作用特点Java虚拟机栈定义结构​编辑栈帧的结构栈帧的生命周期JVM压栈出栈过程Java虚拟机栈的特点常见运行时异常本地方法栈(NativeMethodStack)定义作用结构生命周期特点堆定义特点新生代、老年代对象分配过程总结方......
  • Java面试题--JVM大厂篇之JVM 大厂面试题及答案解析(2)
           ......
  • 函数栈帧的创建与销毁
    目录1.什么是函数栈帧2.了解函数栈帧的好处3.函数栈帧的创建与销毁3.1什么是栈3.2认识相关寄存器和汇编指令3.3解析函数栈帧的创建与销毁3.3.1预备知识3.3.2函数的调用堆栈3.3.3准备环境3.3.4 转到反汇编1.什么是函数栈帧我们在写C语言代码的时候,经常会把一......
  • Prometheus Micrometer jvm告警模版
    基础说明prometheus界面刚开始看起来非常让人疑惑,实际上它的语法非常强大;prometheus既可以读取即使数据(Table),也可以展示趋势图(Graph);Uselocaltime:选择是否已当前时间展示趋势图查询结构筛选内置命令{筛选条件1,筛选条件2}时间周期内总和(increase(内置命令[5m]))固定......
  • 【JVM-双亲委派模型】
    在Java中,双亲委派模型是一种类加载机制。一、定义与工作原理当一个类加载器收到类加载的请求时,它首先不会自己去尝试加载这个类,而是把这个请求委派给父类加载器去完成。只有当父类加载器无法完成加载请求(在它的搜索范围内找不到所需的类)时,子类加载器才会尝试自己去加载......
  • 【JVM-类加载器】
    在JVM中主要有以下几种类加载器:一、启动类加载器(BootstrapClassLoader)作用:负责加载JVM自身需要的核心类库,这些类库主要是Java安装目录下的jre/lib目录中的类。例如,加载Java的核心类库如java.lang包下的类,包括Object、String等。特点:由C/C++语言实现......
  • 【jvm】栈和堆的区别
    目录1.用途2.线程共享性3.内存分配和回收4.生命周期5.性能特点1.用途1.堆:主要用于存储对象实例和数组。在Java中,所有通过new关键字创建的对象都会被分配到堆上。堆是一个大的内存池,用于存储所有的Java对象,包括实例变量和数组。2.栈:主要用于存储局部变量、......
  • JVM
    JVM是什么:是操作系统上Java运行的环境。JVM内存结构模型:调优和垃圾回收都是在堆里的   双亲委派:各种类加载器是层级关系,Java文件首先会给父类加载,类加载器实际上就是很多jar包,每个类加载器会检查自己的jar包是否可以处理Java文件,不可以会给下一层,如果都不可以就会抛出异......
  • 深入Java虚拟机JVM类加载学习笔记
    1.类加载过程----------以及风中叶老师在他的视频中给了我们一段程序,号称是世界上所有的Java程序员都会犯的错误加载---验证---准备---解析---初始化---使用---卸载诡异代码如下:packagetest01;classSingleton{ publicstaticSingletonsingleton=newSingleton();......
  • Java面试题--JVM大厂篇之未来已来:为什么ZGC是大规模Java应用的终极武器?
           ......