2016-11-12 4 views
0
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space 
    at java.util.Arrays.copyOf(Unknown Source) 
    at java.util.Arrays.copyOf(Unknown Source) 
    at java.util.ArrayList.grow(Unknown Source) 
    at java.util.ArrayList.ensureExplicitCapacity(Unknown Source) 
    at java.util.ArrayList.ensureCapacityInternal(Unknown Source) 
    at java.util.ArrayList.add(Unknown Source) 
    at FibonacciHeap.removemax(FibonacciHeap.java:148) 
    at UseFibonacciHeap.main(UseFibonacciHeap.java:61) 

のEclipse上で私のJavaプログラムは、ファイルから文字列を読み込み、配列リストにそれらを挿入し、上の上記の例外をスローしahead.It計算をたくさんやっているを使用して上のJavaヒープスペース150以上の文字列に遭遇しました。私はsleepを使ってVMスペースを増やそうとしましたが、何も動作しません! 最終的な目標は、100万の文字列(すべて一意ではない)を操作することです。java.lang.OutOfMemoryErrorを:のArrayList

編集:ArrayListのtoVisitの

使用方法:クラスの

for (FibonacciNode curr = max_ptr; toVisit.isEmpty() || toVisit.get(0) != curr; curr = curr.right_sibling) 
{ 
    toVisit.add(curr); 
    ... 
} 

VM引数: -Xms1024m -Xmx1524M

誰かがこれを行うのに最適な方法に私を導くことができます。私が使用できる別のデータ構造がありますか?ありがとう!!

+1

追加質問へのあなたのコード。 Arraylistはすぐにメモリを使い果たしてはならないので、エラーはあなたのarraylistを使ってどのようにしているのでしょうか – baseballlover723

+0

ecpliseのVM引数を表示 –

+1

あなたはコードにいくつかのコンテキストを与えることができますか?すべての変数は何ですか?彼らはどこから来たのか?あなたはどこかに無限ループがあると思います。 – baseballlover723

答えて

0

-Xmx6gを使用してヒープスペースを増やすことはできますが、150個の文字列はヒープを吹き飛ばすために非常に小さい数字のようです。 Stringの代わりにStringBufferまたはStringBuilderを使用していることを確認してください。

1

私はこの問題があなたのアルゴリズムにあり、あなたの記憶設定にはないと思います。

まず、あなたは確認する必要があり、コードはスタックトレースに印刷されているラインで何をするか: FibonacciHeap.removemax(FibonacciHeap.java:148) でUseFibonacciHeap.main(UseFibonacciHeap.java:61)で

関連する問題