线程运行原理-栈帧图解

黑马视频讲解地址:https://www.bilibili.com/video/BV16J411h7Rd?p=21

示例

结合代码分析线程运行的原理。
代码如下,很简单就是main方法中调用m1方法,m1方法再调用m2方法。

public class Test01 {

    public static void main(String[] args) {
        m1(10);
    }

    public static void m1(int x){
        int y = x + 1;
        Object m = m2();
        System.out.println(m);
    }

    public static Object m2(){
        return new Object();
    }

}
分析

分析涉及到JVM相关知识:JVM之内存模型

首先执行main方法后,JVM会为main方法创建一个栈帧放到运行时数据区的栈中,栈帧中存放了局部变量表、操作栈、动态链接、方法出口等信息,创建栈帧时局部变量也会开辟好内存空间。

首次加载时他会将java文件加载成字节码放在方法区中等待程序计数器的调用。
在这里插入图片描述
创建好栈帧之后接下来就是在程序计数器中执行main方法中对应的代码,也就是执行m1方法。此时发现有新的方法要执行时JVM会创建m1方法的栈帧,然后再执行m1方法中的代码,执行m1中涉及局部变量,他是存在栈中的,实际会指向堆中的对象。

在这里插入图片描述
m1中执行到m2方法时同理会创建一个栈帧执行m2中的方法,m2执行完之后会创建一个Object返回到m1的中执行的代码行中。同时最顶上的m2栈帧会退出栈接着执行m1栈帧中的代码依次类推指导main栈帧执行结束,线程运行结束。
在这里插入图片描述

总结

通过对线程运行原理的学习,总结如下。

  1. java中方法的执行会对应着每个线程私有栈中的栈帧,栈帧中存放了局部变量表、操作栈、动态链接、方法出口等信息。
  2. 每个方法结束之后,对应的栈帧在虚拟栈中删除释放空间。接着执行下一个栈顶中的栈帧的代码,这就是为什么虚拟栈要叫栈的原因,方法的执行遵循先进后结束原则(先进后出)。
  3. 栈是线程私有的,这样方便在线程发生切换时私有的程序计数器记录保存当前执行的状态,方便线程下一次被唤醒执行时恢复执行。
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值