技巧💡

  1. 线程私有的,每个线程有一个虚拟机栈。生命周期与线程一致。
  2. 每调用1个方法,产生一个栈帧,进行压栈操作
  3. 调用方法结束后,会进行出栈操作
  4. 栈不存在垃圾回收,但是存在OOM

在运行过程中,每当调用进入一个 Java 方法,Java 虚拟机会在当前线程的 Java 方法栈中生成一个栈帧,用以存放局部变量以及字节码的操作数。这个栈帧的大小是提前计算好的,而且 Java 虚拟机不要求栈帧在内存空间里连续分布。当退出当前执行的方法时,不管是正常返回还是异常返回,Java 虚拟机均会弹出当前线程的当前栈帧,并将之舍弃

Java栈大小是动态或者固定不变的。
如果是动态扩展,无法申请到足够内存OOM,
如果是固定,线程请求的栈容量超过固定值,则StackOverflowError