什么情况下会发生栈内存溢出。

1.什么是栈
栈是先进后出的数据模型,这里指的是运行时栈,主要是进行指令存储和辅助运行。栈是线程私有的,他的生命周期与线程相同,每个方法在执行的时候都会创建一个栈帧,用来存储局部变量表,操作数栈,动态链接,方法出口等信息。局部变量表又包含基本数据类型,对象引用类型。
如果线程请求的栈深度大于虚拟机所允许的最大深度,将抛出StackOverFlowError异常,方法递归调用产生这种结果。
如果JVM可以动态扩展,并且扩展动作已经尝试过,但是无法申请到足够的内存去完成扩展,或者在新建线程的时候没有足够的内存去创建对应的JVM Stack,那么JVM将抛出一个OutOfMemory异常(这是启动过多)
2.什么时候会有栈溢出
主要时候在进行递归的时候,在进行递归时,未完成不会释放资源,并且递归的次数不容易通过代码控制,如果超出边界就会导致栈溢出,在新建线程的时候没有足够的内存去创建对应的JVM Stack,那么JVM将抛出一个OutOfMemory异常(这是启动过多),这是主存储不够分配。
3.相关配置参数
-Xss :xxxb

你可能感兴趣的:(jvm,多线程)