概念

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方法执行结束!");
    }
}

执行结果:

  • 入栈出栈
    入栈出栈
  • 栈溢出
    栈溢出