Java虚拟机 (JVM) 栈区


以下是理解JVM栈区的一些关键点:

  • 在创建线程时,Java虚拟机创建一个单独的栈。

  • JVM仅对该栈执行两个操作:压栈(即插入)和弹栈(即删除)。

  • 当线程当前正在执行时,与其关联的栈称为运行时栈。

  • 线程执行的每个方法调用、中间计算、局部变量赋值、调用参数等都作为操作存储在运行时栈中。

  • 一旦线程停止或完成执行,栈中相应的部分就会被删除。

  • 一旦线程的所有调用都完成,栈就会变为空,并被删除。

  • 在终止线程之前,JVM会销毁与该线程关联的栈。

  • 存储与线程关联数据的栈只对该特定线程可用,其他线程无法访问。

  • 这表明栈中的数据是线程安全的。

  • 与线程关联的栈中的每个数据都称为激活记录或栈帧。

注意 - JVM栈不必具有连续的内存位置。

激活记录/栈帧的结构

它包含三个组成部分:

  • 局部变量数组、

  • 操作数栈和

  • 帧数据

  • JVM通过检查类数据来创建所需大小的栈帧。

  • 操作数栈充当JVM的工作区——它用于存储中间计算结果。它的结构类似于局部变量数组,但可以通过对栈执行压栈和弹栈操作来访问。

  • 帧数据 - 它包含常量数据值和方法返回的数据。此外,它还包含对异常表的引用,该表包含关于捕获异常时需要捕获的catch块以及需要在控制台上显示的相关消息的所有信息。

更新于:2020年7月7日

809 次浏览

启动你的职业生涯

完成课程获得认证

开始学习
广告