2016-06-14 10 views
0

サイズ10^9の配列をJavaで宣言するには?配列リストを試しましたが、問題は配列の最小要素と最大要素を探す必要があります。したがって、0番目の要素配列の他のすべての要素との配列の最初と私は、コードシェフ上の配列の入力フォーマットで必要とされる配列のいくつかの固定サイズが必要です。誰でも助けることができますか?私は長い配列を使用してみましたが、メモリエラーを出しました。Javaの大規模配列プログラミング

+1

あなたがしたいことのコードスニペットを追加できますか? –

+0

配列を作成するために ''何でも[1000000000] 'だけです。しかし、それがリファレンスの配列であり、リファレンスごとに4バイトと仮定すると、それは〜4 GBのデータです。メモリが不足している場合は、-Xmxパラメータを使用して作業してください。 (つまり、N個の要素の最小値と最大値を取り出したい場合は、配列全体を読み込む必要はありません)。 – yshavit

+0

あまりメモリがない場合は、おそらくファイルを使用して操作を補うことができます。 – 4castle

答えて

2

Java配列の最大サイズはInteger.MAX_VALUE(場合によっては若干異なる値)で約2.3 * 10^9であるため、理論的にはその大きな配列を作成することは可能です。しかし、10^9は接頭辞giga(読みやすくするため)を意味するので、配列は少なくとも1GB(byte[]を使用する場合)のサイズを持ちます。配列を使用しているデータタイプによっては、あまりにも多くのメモリが必要になるだけです(int[]はすでに4GBを占有しています)。

-Xmxオプションを使用してJVMの最大メモリを増やすことはできますが(最大4GBまで使用できるようにするには-Xmx=4gを使用できます)、アドレス可能なメモリの最大値によって制限されます(たとえばIIRCでは32ビットJVMは上位4GBまでしか使用できません)と使用可能なメモリです。

また、複数のマシンまたはJVMでアレイを分割して分散して使用することもできます。または、配列を(メモリマップされた)ファイルに書き込んで、配列の一部だけをメモリに保存することもできます。

しかし、最も良いアプローチは、おそらくが実際には多くのメモリを必要としているかどうかを確認することでしょう。多くの場合、巧妙なアルゴリズムや構造を使用すると、メモリ要件が大幅に削減されます。何を使うかは、あなたが最終的に達成しようとしているものによって決まります。

関連する問題