私のファイルは9MBで、ワークブックのロード中にこのエラーが発生しました。
XSSFWorkbook workbook = new XSSFWorkbook(excelFilePath);
この行はJava.lang.OutOfMemoryError: Java heap space
どうすればこれを解決できますか?
最初に確認すること-XSSFWorkbookをInputStreamまたはaFile? ファイルははるかに低いメモリ で開きます。
次に、読み書きしますか?メモリが非常に不足している場合は、saxのような方法でXSSFを使用するための代替オプションがあります。
読み取りについては、XSSF + Saxの使用の詳細について http://poi.Apache.org/spreadsheet/how-to.html#xssf_sax_api を参照してください。別のオプションとして、ファイルのテキストコンテンツのみを取得する場合、Apache TikaにPOIを使用した.xlsxファイル用のイベントベースのテキスト抽出機能があるようです。
執筆のために、「ビッググリッドデモ」の改善について最近POI開発者リストで多くの議論がありました。あなたはそれらをフォローしたいかもしれません- http://poi.Apache.org/mailinglists.html
他の人が示唆しているように、最初にすることはヒープサイズを増やすことです。
それでも問題が解決しない場合、または大きなファイルが予想される場合は、この回答も確認してください。 Javaでの大きなxlsxファイルの処理
標準の「すべてを読む」モードが機能しない場合に実行できることについて、いくつかの優れた出発点を提供します。
大きなファイルを書き込む場合:
必要なのは [〜#〜] sxssf [〜#〜] (Streaming Usermodel API)です。
SXSSF(パッケージ:org.Apache.poi.xssf.streaming)は、非常に大きなスプレッドシートを作成する必要があり、ヒープ領域が限られている場合に使用される、XSSFのAPI互換ストリーミング拡張機能です。
そのページにも例があります。XSSFWorkbook
をSXSSFWorkbook
に置き換える必要があります。
別の質問 から vadchen からこの回答をコピーしました。それは私のために働いた。彼が言ったように、私はコードでXSSFWorkbook
をSXSSFWorkbook
に置き換える必要がありました。
32ビットJVMには最大2GBのメモリがあると思いますが、これは時代遅れかもしれません。私が正しく理解していれば、Eclipseランチャーで-Xmxを設定しました。 Eclipseから実行するプログラムのメモリを増やしたい場合は、「実行->実行構成...」で-Xmxを定義する必要があります(クラスを選択して[引数]タブを開き、VM引数領域)メニュー、およびEclipse起動時ではない
編集:あなたが求めた詳細。 Eclipse 3.4
1)実行->実行構成...
2)クラスが「Javaアプリケーション」サブツリーの左側のリストにない場合は、左上隅の「新しい起動構成」をクリックします。
2b)右側の「メイン」タブで、プロジェクトとクラスが正しいものであることを確認します
3)右側の「引数」タブを選択します。これには2つのテキスト領域があります。 1つは、メインメソッドに提供されるargs []配列に入るプログラム引数用です。もう1つはVM引数用です。VM arguments(lower one iirc))のあるものに次のように入力します。-Xmx2048m
1024mはあなたが必要とするもののために十分すぎると思います!
4)「適用」をクリックし、次に「実行」をクリックします。
それでもヒープ領域が不足する場合は、数値をより高い値に変更できます。たとえば、合計が2ギガバイトから4ギガバイトになる-Xmx4gを置くことができます。
ヒープサイズを増やします。
-Xms256m -Xmx512m -XX:PermSize = 64M -XX:MaxPermSize = 1000M
これらの値はVMに提供する必要があります。
へのリンクを見てください、これはあなたを助けるはずです
http://www.javabeat.net/tips/192-javalangoutofmemoryerror-Java-heap-space.html