MeWrite Docs

StackOverflowError

スタック領域がオーバーフローした場合に発生するエラー

概要

StackOverflowErrorは、メソッド呼び出しがスタック領域を超えた場合に発生します。無限再帰や深すぎる再帰が主な原因です。

エラーメッセージ

Exception in thread "main" java.lang.StackOverflowError
    at com.example.MyClass.recursiveMethod(MyClass.java:15)
    at com.example.MyClass.recursiveMethod(MyClass.java:15)
    at com.example.MyClass.recursiveMethod(MyClass.java:15)
    ...

原因

  1. 無限再帰: 終了条件がない再帰呼び出し
  2. 終了条件のバグ: 終了条件が正しく機能していない
  3. 循環参照: オブジェクト間の循環参照でtoString等が無限ループ

解決策

1. 終了条件を確認・修正

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
// 悪い例:終了条件なし
public int factorial(int n) {
    return n * factorial(n - 1);
}

// 良い例:終了条件あり
public int factorial(int n) {
    if (n <= 1) return 1;
    return n * factorial(n - 1);
}

2. 再帰をループに変換

1
2
3
4
5
6
7
public int factorial(int n) {
    int result = 1;
    for (int i = 2; i <= n; i++) {
        result *= i;
    }
    return result;
}

3. スタックサイズを増やす(一時的対処)

1
java -Xss2m -jar app.jar

Java の他のエラー

最終更新: 2025-12-09