99

何が原因java.lang.StackOverflowErrorでしょうか?私が得たスタックのプリントアウトは、それほど深くはありません(5つのメソッドのみ)。

4

12 に答える 12

67

メソッドの再帰呼び出しを確認します。主に、メソッドの再帰呼び出しがある場合に発生します。簡単な例は

public static void main(String... args) {
    Main main = new Main();

    main.testMethod(1);
}

public void testMethod(int i) {
    testMethod(i);

    System.out.println(i);
}

ここで System.out.println(i); testMethod が呼び出されると、繰り返しスタックにプッシュされます。

于 2013-07-08T10:01:23.480 に答える
23

JVM への (オプションの) 引数の 1 つは、スタック サイズです。-Xssです。デフォルト値が何であるかはわかりませんが、スタック上の総量がその値を超えると、そのエラーが発生します。

通常、これは無限再帰が原因ですが、これが発生した場合、スタック トレースに 5 フレームを超えるフレームが含まれていることになります。

-Xss 引数を追加して (または引数の値を増やして)、これがなくなるかどうかを確認してください。

于 2010-07-07T18:29:56.617 に答える
2

Hibernate を使用してプログラムを作成しました。このプログラムでは、2 つの POJO クラスを作成しました。両方とも互いのオブジェクトをデータ メンバーとして使用します。メインメソッドでそれらをデータベースに保存しようとしたときに、このエラーも発生しました。

これは、両方のクラスが相互に参照しているため、このエラーの原因となるループが作成されているために発生します。

したがって、そのような種類の関係がプログラムに存在するかどうかを確認してください。

于 2014-04-03T18:40:30.207 に答える