当前位置: 首页 > news >正文

【jvm】虚拟机栈是如何运行的

目录

          • 1. 说明
          • 2. 栈的创建与线程绑定
          • 3. 栈帧的结构
          • 4. 栈帧的入栈与出栈
          • 5. 异常处理

1. 说明
  • 1.虚拟机栈是Java程序运行时环境中的一个重要组成部分,它主要负责存储线程执行方法时的局部变量、操作数栈、动态链接、方法出口等信息。
  • 2.JVM虚拟机栈是Java程序运行时环境中的一个关键组件,它通过栈帧的入栈和出栈过程来支持方法的调用和执行。
  • 3.每个线程都有自己独立的虚拟机栈,确保了线程之间的数据隔离和并发执行。
  • 4.虚拟机栈的运行原理遵循了栈数据结构的基本特性——后进先出(LIFO),确保了方法调用的正确顺序和方法局部变量的有效管理。
2. 栈的创建与线程绑定
  • 1.线程私有:每个线程在创建时,JVM都会为其分配一个私有的虚拟机栈。这个栈与线程的生命周期相同,即线程创建时栈被创建,线程结束时栈被销毁。
  • 2.栈帧的创建:每当线程调用一个方法时,就会在该线程的虚拟机栈中创建一个新的栈帧(Stack Frame)。栈帧是方法执行时的内存模型,包含了方法执行所需的各种信息。
3. 栈帧的结构
  • 1.局部变量表:用于存储方法中的局部变量(包括参数)。局部变量表的大小在编译时确定,并在方法执行期间保持不变。
  • 2.操作数栈:一个后进先出(LIFO)的栈,用于执行方法的计算。操作数栈主要用于存储方法执行过程中需要操作的数据,如中间结果、参数等。
  • 3.动态链接:指向运行时常量池中该栈帧所属方法的引用,支持方法调用过程中的动态链接。
  • 4.方法出口:持有恢复上层方法的执行状态所需的信息,包括程序计数器、局部变量表等。
4. 栈帧的入栈与出栈
  • 1.入栈:当一个方法被调用时,会创建一个新的栈帧,并将其压入当前线程的虚拟机栈顶。此时,该栈帧成为当前活动栈帧,执行引擎开始执行该栈帧中的方法。
  • 2.出栈:当方法执行完成后,对应的栈帧会被销毁,并从虚拟机栈中弹出。控制权返回到前一个栈帧,继续执行前一个方法的后续指令。
5. 异常处理
  • 1.如果线程请求的栈深度大于虚拟机所允许的深度,会抛出StackOverflowError异常。这通常发生在方法调用过深,导致栈空间耗尽时。
  • 2.如果虚拟机栈可以动态扩展,但在尝试扩展时无法申请到足够的内存,会抛出OutOfMemoryError异常。

http://www.mrgr.cn/news/9733.html

相关文章:

  • 阿里云魏子珺:阿里云Elasticsearch AI 搜索实践
  • 【JPCS独立出版 | 见刊检索稳定】第二届应用统计、建模与先进算法国际学术会议(ASMA2024,9月27日-29)
  • c语言用while循环解决农夫卖西瓜问题
  • 【Redis】RDB和AOF持久化
  • 在VSCode中使用REST Client插件调试HTTP接口
  • VIVO社招入职SHL测评题库题型分析:动机问卷、性格问卷、归纳推理、数字推理、语言推理
  • FreeSWITCH 1.10.10 简单图形化界面28 - 麒麟V10 SP3服务器系统X86和ARM版本安装FreeSWITCH
  • Django后端架构开发:Nginx服务优化实践
  • NVIDIA将在Hot Chips 2024会议上展示Blackwell服务器装置
  • 搜维尔科技:Xsens通过其先进的动作捕捉技术和惯性跟踪传感器,实现了与机器人的高效互动,提高了机器人的操作精度、自然性和稳定性
  • Keepalived介绍、应用场景和示例
  • 双系统报错verifiying shim SBAT data falled: Security Pollcy Violation,Ubuntu无法打开
  • Vue JS执行机制和nextTick
  • Matlab矩阵基础操作
  • 设计模式-visit模式-在语法树的实践
  • 手写SpringAOP
  • 【MySQL】MySQL表的增删改查(初阶)
  • Error connecting to node kafka9092 (id 1001 rack null)
  • react面试题七
  • 这个深度清理工具 真正做到释放电脑垃圾 秒删90%的C盘垃圾