这是一个简单的java类递归调用main方法,但它抛出了一个堆栈溢出异常。如何发生堆栈溢出异常?
public class NewClass {
public static void main(String args[]) {
main(args);
}
}
答案 0 :(得分:2)
当一个方法递归地无限次地调用自身时会发生什么。每次调用都会创建一个新的堆栈帧,直到堆栈溢出。
答案 1 :(得分:0)
因为您正在调用正在调用main method
的{{1}}的{{1}} - 永远 - 直到它崩溃。
答案 2 :(得分:0)
你在没有任何退出条件的情况下递归地进行主要训练。因此,在每次方法调用时,都会创建一个堆栈帧,并且只有有限的内存,因此它必然会在连续帧创建时溢出。有一些退出条件,然后运行正常。
答案 3 :(得分:0)
调用方法时JVM将其保留在堆栈中(堆栈大小是有限的,取决于您的JRE配置)。 首先调用main方法然后它将被加载到Stack中,然后它将再次调用main方法,它将再次进入堆栈...就像每个调用一样明智的方法将被加载到堆栈中直到被调用的方法(这里是main ())将控件返回到其调用方法(再次main())。 由于系统内存在某些时间点受限,因此堆栈将满,并且在那个时间点JVM将引发StackOverFlowError。