根據業務功能,我們需要在多線程環境中的不同位置讀取多個Excel文件(包括.xls和.xlsx格式)。每個線程負責讀取文件。爲了測試性能,我們創建了兩個.xls和.xlsx格式的文件集。一個文件集只有20行數據,而其他文件集包含300,000行數據。我們能夠以.xls格式成功讀取兩個文件並將數據加載到表格中。即使對於20行數據.xlsx文件,我們的源代碼也能正常工作。 但是當執行流程開始讀取.xlsx文件時,應用程序服務器會突然終止。當我開始跟蹤下來的問題,我一直 面臨一個奇怪的問題,同時創造XSSFWorkbook instance.Refer下面的代碼片段:創建XSSFWorkbook實例以讀取XSLX文件時出現OutOfMemory問題
OPCPackage opcPackage = OPCPackage.open(FILE);
System.out.println("Created OPCPackage instance.");
XSSFWorkbook workbook = new XSSFWorkbook(opcPackage);
System.out.println("Created XSSFWorkbook instance.");
SXSSFWorkbook sxssfWorkbook = new SXSSFWorkbook(workbook, 1000);
System.out.println("Created SXSSFWorkbook instance.");[/code]
輸出
Process XLSX file EXCEL_300K.xlsx start.
Process XLSX file EXCEL.xlsx start.
Created OPCPackage instance.
Created OPCPackage instance.
Created XSSFWorkbook instance.
Created SXSSFWorkbook instance.
Process XLSX file EXCEL.xlsx end.
對於較大的文件集執行掛起在 XSSFWorkbook工作簿=新的XSSFWorkbook(opcPackage); 導致堆空間問題。請幫我解決這個問題。
在此先感謝。
謝謝,
Sankar。
這可能是導致無限循環的庫中的錯誤(無論你做什麼都會以OOME結束),或者內存只是簡單的。您是否嘗試增加內存,或者您是否監控了內存消耗的增長? – Marged
1.我正在使用Apache POI -3.10庫進行上述實現。 –
偉大的信息。關於記憶的問題呢?如何更新到3.12,在3.10和3.12之間有很多修復http://poi.apache.org/changes.html? – Marged