面试对象线记录7 什么情况下会发生栈内存溢出
这个问题不是我面试碰到的,但是是我在网上瞎看帖子,在一个帖子上看到的,感觉很有意思,所以学习并且记录一下。 栈是线程私有的,他的生命周期与线程相同,每个方法在执行的时候都会创建一个栈帧,用来存储局部方法表,操作数栈,动态链接,方法出口灯信息,局部变量表又包含基本数据类型,对象引用类型(局部变量表编译器完成,运行期间不会变化) 所以简单的来说,创建的栈帧超过了栈的深度,栈爆掉了,就会产生这种结果。 代码举例:
public class JvmTest {
private int i = 0;
public void a(){
System.out.println(i++);
a();
}
public static void main(String[] args) {
JvmTest j = new JvmTest();
j.a();
}
}
一直给他往死里递归,多nb的栈都得给他爆破掉哈哈哈哈哈