1:JVM虚拟机栈是什么?
java虚拟机栈(java virtual machine stack) ,早期也叫java栈,每个线程在创建是都会创建一个虚拟机栈,其内部保存一个个的栈帧(Stack Frame),对应这一次次的java方法调用。
2:生命周期:生命周期和线程一致
3:作用:
主管java程序的运行,它保存方法的局部变量、部分结果,并参与方法的调用和返回。
4:栈的特点(优点)
1)栈是一种快速有效的分配存储方式,访问速度仅次于PC程序计数器。
2)JVM直接对java栈的操作只有两个:
a:每个方法执行,伴随着进栈(入栈、压栈)
c:执行结束后的出栈工作
3)对于栈来说,不存在垃圾回收问题
5:栈的内部结构:
1)局部变量表
2)操作数栈
3)动态链接(或指向运行时常量池的方法引用)
4)方法返回地址
6:栈的运行原理:
1):不同线程的栈帧是不允许互相调用的,即不可能一个栈帧调用另一个栈帧。不存在安全问题
2):先进先出
下一遍:栈的内部结构之局部变量表
扩展(也是重要点):何时出现StackOverFlowError?
答:方法运行时,进栈的时候,如果栈的剩余内存大小,小于下一次进栈的数据,那么会抛出 StackOverFlowError
解决办法:设置栈的大小--》指令 -Xss size ,比如: -Xss250m 默认是使用字节单位,可以在size后面跟上M(MB的简写)、K(KB的简写),大小不区分