2016-05-07 6 views
0

私は巨大な2D配列を作成しようとしています。Javaで巨大な2D配列を作成する

String[][] arr = new String[100000][100000]; 

しかし、実行時に、私は私のヒープ領域を増やす以外にjava.lang.OutOfMemoryError: Java heap space

を取得し、どのように私はこの例外を取得しないようにするには?あなたが欲しい今までにすると、このList<List<String>> arr = new ArrayList<List<String>>();

のように宣言しList

Listを始めることができ

+0

データソースは何ですか?あなたは本当にすべてのデータを同時に処理する必要がありますか?それ以外の場合は、データをファイルに書き込んだり、領域を解放したり、処理アルゴリズムをデータバッチで処理したり、書き込み中にフィルタリングしたりすることを考慮する必要があります。 –

+0

実際にそのRAMは大量にありますか?もしそうなら、ヒープサイズ '-Xmx20g'を増やすことができます。http://stackoverflow.com/questions/14763079/what-are-the-xms-and-xmx-parameters-when-starting-jvms#14763095を参照してください。しかし、これは非常に速くないと考えるべきです。別のアルゴリズムやある種の分散キャッシュ/メモリDBの使用を検討する必要があります。 –

+0

@Mortiz巨大なデータを格納するための代替アルゴリズムを提案できますか? –

答えて

1

は、あなたが本当にない場合は、100000 X 100000のポジションを使用しようとしていると、あなたは最大の限界がわかりませんあなたにこれをする必要があると呼ぶ代わりにarr[0][1]

+0

私は最大限については確信しています。私はリストを使うことができますが、挿入しているうちに、ある時点で、私は再びメモリ不足になります。 –

1

あなたはできませんそれはあなたの配列の100000 * 100000 = 10.000.000.000のデータを作る!

あなたの記憶がありません!

2つの数字を減らして、私はあなたがこの多くのメモリを必要とは思わない!

あなたは上に行くことができます。

String[][] arr = new String[14000][14000]; 

私が試したし、それが動作します!

関連する問題