内存不足-创建XSSFWorkbook实例以读取XSLX文件时出现内存不足问题



根据业务功能,我们需要在多线程环境中读取不同位置的多个excel文件(.xls和.xlsx格式(。每个线程负责读取一个文件。为了测试性能,我们创建了两个.xls和.xlsx格式的文件集。一个文件集只有20行数据,而另一个文件集中包含300000行数据。我们能够成功读取.xls格式的两个文件,并将数据加载到表中。即使对于20行的data.xlsx文件,我们的源代码也运行良好。但当执行流开始读取.xlsx文件时,应用程序服务器突然终止。当我开始追查这个问题时创建XSSFWorkbook实例时遇到一个奇怪的问题。请参阅下面的代码片段:

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工作簿=新的XSSFWorkbox(操作包(导致堆空间问题。请帮我解决这个问题。

提前谢谢。

谢谢,

桑卡。

在尝试了许多解决方案后,我发现处理XLSX文件需要巨大的内存。但是使用POI 3.12库有多种优点。

  1. 更快地处理excel文件
  2. 有更多的API来处理excel文件,如关闭工作手册,使用文件实例打开excel文件等

最新更新