2014-09-26 75 views
0

我想使用Apache POI XSSF庫解析一個大型的excel文件(.xlsx)。 100,000行後,它會拋出堆空間錯誤。我試圖增加內存,但它沒有幫助。有沒有解決這個問題的方法?或者可以有人建議我另一個庫來解析大型的Excel文件。Apache POI的堆空間錯誤XSSF

謝謝!

+0

您是否嘗試閱讀[Apache POI FAQ條目「我認爲POI使用的內存太多了!我能做什麼?」](http://poi.apache.org/faq.html#faq-N10109) – Gagravarr 2014-09-26 22:30:35

回答

-1

試試Apache POI的最新版本(stable!)。

替代品可能是smartXLS

-1

當面臨的最常見的OutOfMemoryError,即一個「java.lang.OutOfMemoryError:Java堆空間」,一些簡單的方面,必須首先理解。

允許Java應用程序使用有限的內存量。此限制在應用程序啓動過程中指定。爲了使事情更復雜,Java內存被分隔成不同的區域,分別稱爲堆空間和permgen。

這些區域的大小是在Java虛擬機(JVM)啓動期間通過指定參數(如-Xmx和-XX:MaxPermSize)設置的。如果您未明確設置尺寸,則將使用平臺特定的默認值。

因此,當您嘗試向堆空間區域添加更多數據但是沒有足夠空間時,將觸發「[java.lang.OutOfMemoryError:Java堆空間] [1]」錯誤。

在此基礎上簡單的描述,你有兩個選擇

  • 提供更多的空間數據結構
  • 減少數據結構的使用

給予更多的空間是很容易的大小 - 只需通過更改-Xmx參數來增加堆大小,類似於下面給出Java堆1G堆玩的示例:

java -Xmx1024m com.mycompany.MyClass 

減少數據結構的大小通常需要更多的努力,但這可能是必要的,以擺脫潛在的問題 - 給予更多的空間有時可以掩蓋症狀並推遲不可避免的。例如,當面對內存泄漏時,您只是推遲了所有內存都充滿了泄漏垃圾的時間。

在你的情況下,讀取小批量數據和每批處理數據可能是一種選擇。