Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

POIでのEXCELの出力時のxls,xlsxでの処理速度の違い

Apache POIでEXCEL出力を行っているのですが,
同一データをxls,xlsxで出力すると
xlsでの出力時は問題なく出力されるのですが
xlsxで出力を行うとメモリエラーになってしまいます。

処理の流れとしては

WorkbookFactoryメソッドでテンプレートとなるxlsもしくはxlsxを読み込み
パッケージorg.apache.poi.ss以下のクラスを使用して値の書き出し等を行っています。
 ※HSSF、XSSFを直接指定して処理を行った場合でもxlsxはメモリエラーになりました。

メモリ指定を増やす以外で何か対応策等ありませんでしょうか?

6

回答

22429

閲覧

6件の回答

評価

0

「メモリエラー」の内容が書かれていないが、メモリ指定を
増やすのは何がまずいんだ?

評価

0

$さん、ご回答ありがとうございます。
>「メモリエラー」の内容が書かれていないが、メモリ指定を
>増やすのは何がまずいんだ?

すみません、「メモリ」の間違いでした。
調べていくとメモリを増やせば対応できるのでは、とコメントされていることがありました。
けど、現実むずかしいので除外しています。

現在、調査を進めているのですが以下の状況が見えてきました。
・poi3.5は「OutOfMemory」となる
・poi3.6は、なんとか正常終了する

poiのバージョンを上げて対応できるのであればいいのですが、その情報がないので手を出す勇気がない状態です。(時間的にも)

評価

0

>メモリ指定を増やす
「メモリ」を増やすんじゃなくて、VM が使えるマージン
を大きくすることだよ。
起動オプションでヒープサイズ指定できるでしょ。
あれを大きくしたらどうだ?っていう指摘でしょう。
大抵は、
-vm256m とかなってるから、
-vm1024m とか4倍くらいにしたらいけるんじゃないの?
ってこと。

評価

0

いろいろ無知ですみません。

>-vm1024m とか4倍くらいにしたらいけるんじゃないの?

「-Xmx1024m」で設定されています。
Tomcatを使っているので、これが上限ですかね〜。

評価

0

まだxlsxの扱いはこなれてないんじゃないかなあ。
3.6だとオブジェクトの使い方がマシになってるのかもね。

作成時の各Javaオブジェクトは十分使い回し、解放ができて
るという前提で(ここを整理するだけで結構変わる場合もあ
る)。
例えば複数シートなら、1シートずつ作って後からマージする
方がメモリに優しかったりも、するかもしれない。
期待できないけど、まあ考えられることは試してみても。

評価

0

それと、該当する処理自体を別のプロセス(バッチ処理)に
すれば、Tomcat分は考えないで良くなるな。

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。