2015-10-19 48 views
0

我們需要加載和讀取非常大的xlsx文件,其中可能包含100列和1000行。我們嘗試加載大小爲8MB的文件,並且應用程序和Web服務器上的最大堆大小都設置爲4GB。該代碼運行到內存不足,在以下行使用XSSFWorkbook加載8MB電子表格運行到內存不足

XSSFWorkbook workbook = new XSSFWorkbook(is);     

我不知道8MB文件是否佔用4GB大小的堆大小。如果是這樣的話,可以採取什麼措施避免出現內存不足問題。

+1

您是否嘗試過-Xms和-Xmx JVM參數? –

回答

1

8MB文件壓縮時內部String/XML數據非常容易壓縮,所以實際的數據實際上會更多,雖然超過4GB的內存設置,這個文件仍然聽起來很奇怪..

如果你想能夠閱讀任意憤怒的文件,那麼有一個流接口通過XSSFReader作爲POI的一部分提供。這允許讀取類似於SAX XML Parsing的文件,而無需將整個文檔加載到內存中。

在寫作方面,您可以看看SXSSFWorkbook,它允許通過內部流式機制寫出大文件,請參閱here爲例。