Java虚拟机栈
JVM虚拟机栈是线程私有的,每个线程都具有一个虚拟机栈,其内部保存一个个栈帧,对应着每个方法的调用。生命周期和线程周期相同
虚拟机栈的作用
主管Java程序的运行,进程如的栈帧存储着局部变量表,操作数栈,动态链接,方法返回值等
栈帧
栈帧是虚拟机栈的基本单位,栈帧的调入对应着方法的调用,栈帧的弹出对应着方法的结束和返回,其中,由于只有弹栈和入栈的操作,Java虚拟机栈没有GC机制但在栈空间不够时会出现StackOflowError错误,java虚拟机允许栈的大小是动态或者固定不变的(可通过-Xss命令实现栈的扩展),尽管可以通过命令调整栈大小,但不能无限制扩展,当栈无法申请到足够的内存会抛出OutOfMemoryError错误。
运行时栈帧结构
栈帧包括局部变量表,操作数栈,动态连接,方法返回地址和一些附加信息。其中局部变量表和操作数栈最为重要。