一 Java虚拟机栈是什么?

Java虚拟机栈(Java Virtual Machine Stack),早期也叫Java栈。每个线程在创建时都会创建一个虚拟机栈,其内部保存一个个的栈帧(Stack Frame),对应着一次次的Java方法调用。
是线程私有的

二 生命周期

生命周期和线程一致。

三 作用

主管Java程序的运行,它保存方法的局部变量、部分结果,并参与方法的调用和返回。

栈的特点(优点)

  • 栈是一种快读有效的分配存储方式,访问速度仅次于程序计数器
  • JVM直接对Java栈的操作只有两个
    • 每个方法执行,伴随着进栈(入栈,压栈)
    • 执行结束后的出展工作
  • 对于栈来说不存在垃圾回收问题(GC),但是存在(OOM)内存溢出

栈是运行时的单位,而堆是存储的单位

即:栈解决程序的运行问题,即程序如何执行,或者说如何处理数据。堆解决的是数据存储的问题,即数据怎么放,放在哪儿。

栈中可能出现的异常

  • StackOverflowError (栈大小固定的时候,如果空间不足就出现了)
  • OutOfMemoryError (如果栈大小是动态的,但是内存不足了,就会出现)

image.png

设置虚拟机栈的大小 -Xxx1024k

image.png