java栈帧运行过程图解

运行的代码块内容:

public class FrameTest {
    public static int add(int a, int b){
        int result = a + b;
        return result;
    }

    public static void main(String[] args){
        int a = 10;
        int b = 5;
        int addNum = add(a, b);
    }
}

main方法一旦运行,主线程就启动了,jvm会分配一份栈内存(Main栈),栈内存是一个壳,里面由各个栈帧组成。
栈帧是随着方法的调用而创建,随着方法的结束而销毁。(方法的结束无论是正常结束,还是异常结束,都算方法的结束。栈帧是一种数据结构,用来存储方法运行中的局部变量或过程运算结果。
每个栈帧对应一个被调用的方法,可以理解为一个方法的运行空间,每个栈帧中包含局部变量表(Local Variables)、操作数栈(Operad Stack)、动态链接、方法返回地址(Return Address)和附加信息。

  • 采用idea查看栈帧过程
    idea中main方法栈帧
    在这里插入图片描述
    采用单步执行可以发现,栈帧是先进后出的结构。
  • 开始进入main方法
    在这里插入图片描述
  • 执行到add方法()
    在这里插入图片描述
    main方法一旦启动(线程启动),虚拟机会为其分配一份main栈帧。当执行FrameTest时,首先会进行类加载,把FrameTest这个类的字节码放入方法区。
  1. 启动主线程,分配主线程的内存空间,若时间片分配到主线程,则执行主线程代码。
  2. 主线程中的代码入口都是main方法,进入main方法,分配main栈帧。
  3. 当main方法中程序计数器地址为add()方法的地址时,则执行add方法时,虚拟机会创建add栈帧,记录局部变量和返回地址。
  4. add方法执行完,则释放栈,根据栈中返回地址,返回到上一个栈。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值