1

JOpenDoc APIを使用してODSシートを処理しているときに、Javaヒープ領域用にOutOfMemoryErrorを取得しています。処理シートには6000件のレコードが含まれています。 JProfilerごとに、レコードが多いほどメモリ空間を消費します。 -X引数でJVMサイズを増やさずにこのエラーを取り除く方法。ここでは、outofmemoryを引き起こしている私のJavaコードです。Javaヒープ領域のOutOfMemoryErrorを克服するにはどうすればよいですか?

SpreadSheet spreadSheet=SpreadSheet.createFromFile(new File("document.ods")); //memory-35 MB 
Sheet sheet1=spreadSheet.getSheet(1); // consumed memory - 47 MB 
Sheet sheet2=spreadSheet.getSheet(2); // consumed memory - 59 MB 
Sheet sheet3=spreadSheet.getSheet(3); // outofmemory error since the default size is 64 MB 
+0

-Xフラグを使用しない理由はありますか? – Jason

+3

um、すべてのメモリを使用して停止しますか? JVMが利用できるメモリを必要なものに増やすことを拒否すれば、それはあなたのもう一つの選択肢です。一度に1つの「シート」のみを処理します。 –

+0

@ Jason:シートレコードが徐々に増加する可能性があるので、はい。その場合、割り当てられる固定ヒープメモリはありません。レコード数が多いほどヒープメモリーが増えていると私は言っていました。 – hemanth

答えて

2

-Xmxを使用してメモリを増やすか、メモリ使用量を減らす必要があります。たとえば、一度に3枚のシートをすべてロードする必要がありますか?そうでない場合は、その参照を解放します(例:sheet1 = null)。ガベージコレクタがそれを処理します。

関連する問題