2012-04-17 3 views
0

強く接続されたコンポーネントを計算している1milに近いグラフがあります。私は10240メガバイトにVMのヒープサイズを増加しているが、それはまだ、この例外がスローされます。大きなグラフのSCCを計算する際のJavaスタックのオーバーフロー

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

私は、コードは問題が、サイズではないことを絶対的に確信しています。他に何ができますか?

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

私はStackOverflow.com上にStackOverflowErrorを解決できない場合は、私は=オンにする他にどこかわからない)

+0

さらにコードを追加する必要があります。再帰呼び出しを使用している場合は、通常のループを使用するようにコードを変更する必要があります。 –

+0

さて、最初にスタックサイズを増やしてみませんか?それはGoogleです。 –

+0

スレッドスタックメモリはヒープの一部ではないため、ヒープサイズはStackOverflowErrorsに影響しません。スレッドスタックサイズを増やすことはできますが、それは別のJVMオプションです。 –

答えて

1

StackOverflowErrorjava.util.Stackとは何の関係もないことを、覚えておいてください:エラーがときにスローされます呼び出しスタックのためのスペースがなくなり(つまり、深すぎる再帰)、Stackオブジェクトにスペースがないときではなくなります。

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

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

関連する問題