栈
实际叫线程栈
当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线程中.
Main main = new Main();
之后,在main栈帧的局部变量表中,出现了一个对象指向堆.
在main()方法进入compute()方法时, 栈中压入calculate()方法的栈帧.开始执行calculate()方法的代码.
在java中有个工具可以将.class文件反编译javap
一般使用-c
.
接下来主要对calculate()进行解析
栈帧中主要组成部分:
- 局部变量表
局部变量表主要存储该方法内使用的局部变量 - 操作数栈
操作数栈存放用于计算的数据. - 动态链接
动态链接的作用目前不是很明确,通过最后两个字链接
可以知道大概是个找什么东西的.后续会继续查询和学习动态链接的作用. - 方法出口
方法执行完,返回的位置.