2011-06-30 6 views
2

remoteConnection.getObjects()のようなメソッドを提供するAPIを使用して、リモートサーバーからオブジェクトのリストを取得しています。このリストは巨大で、Javaヒープ・スペースOutOfMemoryErrorが発生することがあります。これらのオブジェクトをメモリにロードするのではなくファイルに直接ダンプする方法はありますか?OutOfMemoryError - メモリではなくファイルにデータをダンプできますか?

+2

はい、APIに依存します - APIがそれらをすべて配列にロードしてその配列を返そうとすると、それについてはあまりできません。 ) – Justin

+0

残念なことにごみAPI。また、クローズドソースと他のオプションはありませんが、それに固執する。 – Michael

+1

非常に興味深い質問です。このメソッドを非常に頻繁に呼び出すつもりがなく、パフォーマンスについて気にしない場合は、理論上、別々の仮想マシンをロードし、オブジェクトをロードしファイルに書き込むために膨大なスワップメモリ​​ブロックを使用させることができます。そのようなことは一度も試したことはありませんが、うまくいく可能性があると思います。 – bezmax

答えて

5

が、残念ながら答えはあなたがカントノーである - 「メモリ不足」実際には、物理​​メモリが不足していることを意味するものではありません、それはあなたの仮想アドレス空間がいっぱいであることを意味し/断片化して、それ以上割り振る。

物理メモリがボトルネックではないため、短いページングビットのメモリがディスクに役立つことはありませんが、制限する要因は単にメモリに対処することだけです。 (OSは既にあなたのためにメモリをディスクにシームレスにページングしています)。

あなたのオプションは(私が見ることができる)は次のとおりです。

  • ロビーAPIの開発者がAPIを変更、または
  • 試みに小さなチャンクにデータを返すAPIを使用する別の方法を見つけるためにいずれかの方法でご利用可能なアドレス空間を増やす:
    • をアドレス空間をできるだけ
    • として、既存のメモリ使用量を削減増加(例えば、対象のx64)
+0

ああ、非常に興味深い、説明のおかげで。私は多くのオプションが残っているとは思わない – Michael

+0

素敵な答え。私のものよりも良い;)+1 –

3

残念ながら、その量のデータを返すのがAPIの場合は、あまりできません。 -Xmx jvm argを使用してヒープサイズを増やすことはできますか?あなたが説明したものから

+0

私はしましたが、明らかに150k取引は2gに収まらないでしょう – Michael

+0

150kオブジェクトのためのWow 2gsと彼らはまだ適合しません!私は、APIの開発者が帯域幅のサイズだけを考慮してこれを変更できると確信しています。 –

関連する問題