为什么这个Java类会产生堆栈溢出异常?

时间:2015-03-16 07:11:49

标签: java recursion stack-overflow

这是一个简单的java类递归调用main方法,但它抛出了一个堆栈溢出异常。如何发生堆栈溢出异常?

public class NewClass {

    public static void main(String args[]) {

        main(args);

    }

}

4 个答案:

答案 0 :(得分:2)

当一个方法递归地无限次地调用自身时会发生什么。每次调用都会创建一个新的堆栈帧,直到堆栈溢出。

答案 1 :(得分:0)

因为您正在调用正在调用main method的{​​{1}}的{​​{1}} - 永远 - 直到它崩溃。

答案 2 :(得分:0)

你在没有任何退出条件的情况下递归地进行主要训练。因此,在每次方法调用时,都会创建一个堆栈帧,并且只有有限的内存,因此它必然会在连续帧创建时溢出。有一些退出条件,然后运行正常。

答案 3 :(得分:0)

调用方法时JVM将其保留在堆栈中(堆栈大小是有限的,取决于您的JRE配置)。 首先调用main方法然后它将被加载到Stack中,然后它将再次调用main方法,它将再次进入堆栈...就像每个调用一样明智的方法将被加载到堆栈中直到被调用的方法(这里是main ())将控件返回到其调用方法(再次main())。 由于系统内存在某些时间点受限,因此堆栈将满,并且在那个时间点JVM将引发StackOverFlowError。