jvm的运行机制(二) 栈详解


实际叫线程栈
当main线程开始时,jvm就在jvm的内存区中,分配一块内存.存放主线程运行时的局部变量.

看一段代码 :

public class Main {
    public static void main(String[] args) {
        Main main = new Main();
        main.calculate();
    }

    public int calculate(){
        int a = 2;
        int b = 4;
        int c = (a + b) * 10;
        return c;
    }
}

当main线程开始时,jvm就在jvm的内存区中,分配一块内存.存放主线程运行时的局部变量.
在main()方法开始时,有一块main()方法对应的栈帧进入main线程中.
mian方法开始时,对应的栈帧进入线程

Main main = new Main();

之后,在main栈帧的局部变量表中,出现了一个对象指向堆.
在main()方法进入compute()方法时, 栈中压入calculate()方法的栈帧.开始执行calculate()方法的代码.
calculate()方法开始时


在java中有个工具可以将.class文件反编译javap
javap
一般使用-c.
对Main.class进行反编译

接下来主要对calculate()进行解析
calculate()方法执行过程


栈帧中主要组成部分:

  • 局部变量表
    局部变量表主要存储该方法内使用的局部变量
  • 操作数栈
    操作数栈存放用于计算的数据.
  • 动态链接
    动态链接的作用目前不是很明确,通过最后两个字链接可以知道大概是个找什么东西的.后续会继续查询和学习动态链接的作用.
  • 方法出口
    方法执行完,返回的位置.

   转载规则


《jvm的运行机制(二) 栈详解》 echi1995 采用 知识共享署名 4.0 国际许可协议 进行许可。
 上一篇
SpringBoot(一) SpringBoot(一)
SpringBoot(一)最开始使用spring时,配置bean使用的都是xml格式, 在xml中写标签,属性也要用ref去指定.后来接触到使用注解进行配置, 只要使用@Bean注解修饰这个方法,在扫包的时候扫到,该方法的返回值就会放到io
下一篇 
数据库索引 数据库索引
索引是帮助mysql高效获取数据的排好序的数据结构 使用索引的几种数据结构 二叉树 红黑树 B树 B+树 * 首先记录一个数据结构可视化的网站.Data Structure Visualizations 1) 二叉树使用二叉树,对索引字段
  目录