概念
java虚拟机栈是什么?
- 用于方法执行的一块 Java内存区域
为什么使用java虚拟机栈?
- 每个方法在执行的同时都会创建一个栈帧(
Stack Framel
)用于存储局部变量表、操作数栈、动态链接、方法出口信息等。每一个方法从调用直至执行完成的过程,就对应着一个栈帧在虚拟机中入栈到出栈的过程
特点
- 局部变量表存放了编译器可知的各种基本类型(
boolean、byte、char、short、int、float、long、double
)以及对象引用(reference
类型) - 如果线程请求的栈深度大于虚拟机所允许的深度,将抛出
StackOverflowError
异常
示?
public class A {
public static void main(String[] args) {
System.out.println("进入主方法~");
// b();
c();
System.out.println("主方法执行结束!");
}
public static void a(){
System.out.println("进入a方法~");
System.out.println("a方法执行结束!");
}
public static void b(){
System.out.println("进入b方法");
a();
System.out.println("b方法执行结束!");
}
//无递归出口,递归调用模拟栈溢出
public static void c(){
System.out.println("进入c方法");
c();
System.out.println("c方法执行结束!");
}
}
执行结果:
- 入栈出栈
- 栈溢出