2012-03-23 11 views
1

私は200MBのファイルを持っています。次の形式のファイルを持っています。Javaは200MBのファイルを読み込み、メモリにロードするとどのくらいのメモリが必要になるでしょうか?

各行は0,1,2,3の間隔の整数です。

0 1 2 0 1 3 ...

だから、私は、Vectorを使用してアレイを使用して、メモリにこのファイルを読みたい場合は?またはByteArrayを使用していますか?またはストリング? は、私が適切なJavaヒープサイズを設定するために、メモリの種類を見積もることができますか?十分な256MB?各バイトのための文字列の使用はchar(あなたがバイトを使用するように仮想マシンフラグを設定することができます)のリストについては

​​

- - どのように多くの整数カウント文字列のサイズ×2の場合

+4

最も良い方法は、アプリをプロファイルすることです。コマンドラインで "jvisualvm"を実行してみてください。 –

+4

私は一般的にメモリに200MBのファイルをロードすることを避けるでしょう。つまり、間違った問題を解決している可能性があります。 –

+1

Meh;私は200Mファイルをメモリにロードすることに問題はありません。実際に何をしようとしているのか、アクセスパターンが何であるかなどによってまったく異なります。さらに、何が行われているかによって、とにかくOSはそれをメモリに保持している可能性があります。 –

答えて

0

。各整数に対して、intへの1つのポインタを作成します(4バイトまたは8バイトのプラットフォームへの依存関係 - 64ビットマシンで32ビットアドレスを使用するようにjvmオプションを設定することができます)

整数の数x(1の整数) +(リスト内の整数へのポインタ))=整数の2 *(番号)*一つのポインタの(サイズ)

のByteBuffer - バイト、短いまたは - ファイル

最善の解決策のように同じ大きさはプリミティブ配列でありますint。整数精度の依存関係です。あなたが持っているバイト数(intの数)は、ファイルサイズより小さくすることができます。

+0

ASCIIと仮定します。 – bmargulies

+0

ベクトルを使用してデータを読み取ると、1.6Gになりますか?これは8倍です。私は整数オブジェクトが1つの数字を表すために16バイトを取ることを理解しています、それは1.6Gの代わりに800mです – user974270

+0

あなたにファイルがあることを確認するには0 1 2 0 1 3 - それは12バイトです。 6つの整数に変換されます。 6×16 = 96バイト。だからあなたは8時間以上持っています:) –

関連する問題