栈(JVM Stack)存放主要是栈帧( 局部变量表, 操作数栈 , 动态链接 , 方法出口信息 )的地方。注意区分栈和栈帧:栈里包含栈帧。
栈溢出情况
1.线程请求的栈深度大于虚拟机允许的最大深度 StackOverflowError
2.虚拟机在扩展栈深度时候,内存不够新建线程 无法申请到足够的内存空间
java.lang.OutOfMemoryError:unable to create new native thread
例如,通过递归调用方法,不停的产生栈帧,一直把栈空间堆满,直到抛出异常 :
package com.study.compare;
public class StackOverFlowError {
public void TestStackOver(){
this.TestStackOver();
}
public static void main(String[] args) {
StackOverFlowError stackOverFlowError = new StackOverFlowError();
stackOverFlowError.TestStackOver();
}
}
