- 简介
⽤于作⽤于⽅法执⾏的⼀块Java内存区域
- 作用
每个⽅法在执⾏的同时都会创建⼀个栈帧(Stack Framel)⽤于存储局部变量表、操作数栈、动态链接、⽅法出⼝等信息。
每⼀个⽅法从调⽤直⾄执⾏完成的过程,就对应着⼀个栈帧在虚拟机栈中⼊栈到出栈的过程
- 代码案例
import java.util.concurrent.atomic.AtomicInteger;
public class A {
public static void a(){
System.out.println("enter method a");
}
public static void b(){
a();
System.out.println("enter method b");
}
public static void main(String[] args) {
b();
System.out.println("enter method main");
}
}
- 执行结果
- 先执行的方法先入栈
- 先入栈的后出栈
- 特点
局部变量表存放了编译期可知的各种基本数据类型(boolean、byte、char、short、int、float、long、double)以及对象引⽤(reference 类型)
如果线程请求的栈深度⼤于虚拟机所允许的深度,将抛出 StackOverflowError 异常
- 模拟异常
- 不断入栈,导致内存溢出