JVM 虚拟机栈:方法执行的内存模型
虚拟机栈(Java Virtual Machine Stack)是 JVM 运行时数据区的核心组件之一,它专门用于描述 Java 方法的执行过程。作为线程私有的内存区域,虚拟机栈的生命周期与线程一致,内部通过 “栈帧” 记录方法调用的状态,是理解方法执行、局部变量存储、操作数计算的关键。
虚拟机栈的基本特性
1. 线程私有
每个线程在创建时会同步创建一个虚拟机栈,各线程的虚拟机栈相互隔离,确保方法执行的线程安全性。例如,线程 A 调用 methodA() 和线程 B 调用 methodA() 会在各自的虚拟机栈中生成独立的栈帧,互不干扰。
2. 栈帧为核心单位
虚拟机栈的内部存储单元是栈帧(Stack Frame),每个方法的调用对应一个栈帧的 “入栈”,方法执行完成(正常返回或抛出异常)对应栈帧的 “出栈”。因此,虚拟机栈的操作极其简单:只有入栈(push)和出栈(pop)两种操作。
3. 无垃圾回收
虚拟机栈的内存随方法调用动态分配,随方法结束自动释放(栈帧出栈),无需 GC 介入,内存管理高效且确定。
4. 访问速度快
虚拟机栈的内存分配和释放基于连续的栈空间,访问速度仅次于程序计数器,远快于堆内存。
栈帧:方法执行的状态载体
栈帧是虚拟机栈的基本组成单元,每个栈帧对应一个方法的执行状态,内部包含局部变量表、操作数栈、动态链接、方法返回地址和附加信息五部分。
