0

1 ミルに近いノードを持つグラフがあり、その上で強く接続されたコンポーネントを計算しています。VM のヒープ サイズを 10240 mb に増やしましたが、まだこの例外がスローされています。

Error: 875714
Exception in thread "main" java.lang.StackOverflowError
    at java.util.Stack.push(Stack.java:67)

コードが問題ではなく、サイズであることは間違いありません。他に何ができますか?

UPDATE : VM に設定したヒープ サイズに関係なく、6 秒後に StackOverflowError がスローされます。

StackOverflow.com で StackOverflowError を解決できない場合は、他にどこに向かうべきかわかりません =)

4

2 に答える 2

1

StackOverflowErrorこれは何の関係もないことに注意してください。オブジェクトjava.util.Stackにスペースがない場合ではなく、呼び出しスタックのスペースがなくなった場合 (つまり、再帰が深すぎる場合) にエラーがスローされStackます。

私が提案する最初のことは、アルゴリズムを修正することです。私の盲目的な推測では、オーバーフローの原因となる隣接ノードを訪問するために再帰を使用していると思われます。再帰の代わりにループを使用してみてください。

短期的な目的で、を使用してスタック サイズ (ヒープ サイズではない) を増やすこともできます-Xss。ところで、各スレッドには独自のスタックがあることに注意してください。

于 2012-04-17T16:23:55.860 に答える
0

StackOverflowErrorと を混同しないでくださいOutOfMemoryError。AStackOverflowErrorは「アプリケーションの再帰が深すぎる場合」に発生しますが、A は「ガベージ コレクターによって使用できるメモリがなくなっOutOfMemoryErrorた場合」に発生します。

sを取得しているのでStackOverflowError、再帰をループに変換できる場所を見つけてみてください。それは役立つはずです。

于 2012-04-17T16:25:15.190 に答える