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

[Java]栈 虚拟机栈 栈帧讲解

1. 栈(Stack)

  • 基本概念:栈是一种**后进先出(LIFO)的线性数据结构,支持两种操作:压栈(push)弹栈(pop)。

  • 在计算机中的作用

    • 存储函数/方法的调用链。

    • 保存局部变量、方法参数、返回值等临时数据。

    • 是线程私有的内存区域,生命周期与线程绑定。


2. 虚拟机栈(JVM Stack)

  • 定义:虚拟机栈是JVM为每个线程分配的一块内存区域,用于支持Java方法的执行。每个线程在创建时都会分配一个独立的虚拟机栈。

  • 核心作用

    • 存储方法调用的栈帧(Stack Frame)

    • 管理方法调用中的局部变量、操作数、动态链接和返回地址。

  • 关键特性

    • 线程私有:不同线程的虚拟机栈互不干扰。

    • 栈大小可配置:通过JVM参数 -Xss 设置(如 -Xss256k)。若栈深度超过限制(如无限递归),会抛出 StackOverflowError

    • 生命周期:与线程相同,线程结束时虚拟机栈被回收。


3. 栈帧(Stack Frame)

  • 定义:每个Java方法执行时,JVM会在虚拟机栈中创建一个栈帧。方法从调用到执行完成对应栈帧的入栈到出栈

栈帧的组成

组成部分作用
局部变量表存储方法参数和局部变量,以变量槽(Slot)为单位。非静态方法的第0位Slot存放 this
操作数栈存放执行字节码指令所需的操作数(如算术运算的中间结果)。
动态链接指向运行时常量池的引用,支持方法调用时的动态绑定(如多态)。
方法返回地址方法退出时返回到调用者的位置(程序计数器值或异常处理表地址)。
附加信息调试信息、性能监控数据等(JVM实现相关)。

栈帧的工作流程

  • 方法调用:新栈帧压入虚拟机栈。
  • 方法执行:操作数栈处理字节码指令,局部变量表读写数据。
  • 方法返回:栈帧弹出,恢复调用者的栈帧,根据返回地址继续执行。

总结

  • 是后进先出的数据结构。
  • 虚拟机栈是线程私有的内存区域,管理Java方法调用。
  • 栈帧是方法执行的基础单元,包含局部变量、操作数等关键信息。

http://www.kler.cn/a/585457.html

相关文章:

  • 蓝桥每日打卡--查找有序数组中的目标值
  • kotlin与MVVM的结合使用总结(二)
  • 工业三防平板AORO-P300 Ultra,开创铁路检修与调度数字化新范式
  • python多种数据类型输出为Excel文件
  • 【模块化编程】数据标签 转 独热编码
  • SSL 和 TLS 认证
  • 汉朔科技业绩高增长:市占率国内外遥遥领先,核心技术创新强劲
  • 六十天前端强化训练之第十七天React Hooks 入门:useState 深度解析
  • 嵌入式硬件--开发工具-AD使用常用操作
  • 今日《AI-人工智能-编程》-3月13日
  • 音视频处理工具 FFmpeg 指令的使用(超级详细!)
  • 电子电子架构 --- 车载ECU信息安全
  • Golang | 每日一练 (5)
  • LabVIEW电池内阻精确测量系统
  • Python基于深度学习的身份证识别考勤系统【附源码、文档说明】
  • 数据炼丹与硬件互动:预测湿度的武学之道
  • 【day13】营销系统:优惠券核销流程
  • 基于python+django+vue.js开发的社区养老管理系统源码+运行步骤
  • 鸿蒙开发:了解应用级配置信息
  • Windows11【1001问】打开Windows 11控制面板的14种方法