Java-Apache poi导致java.lang.OutOfMemoryError:超出了GC开销限制

时间:2018-10-31 07:46:07

标签: java javafx apache-poi

我正在尝试打开一个Excel文件,该文件的大小为22MB,其中包含9905行(我认为不是很大)。

我尝试用java apache poi打开它:

final File f = Utils.getFileWithRespectToJar(this, filename);
final Workbook workbook = WorkbookFactory.create(f);

final Sheet sheet = workbook.getSheetAt(0);
final int maxRowLength = sheet.getLastRowNum();

几秒钟后,java占用了大约3.3GB的RAM和90%的CPU,大约一分钟后,我的eclipse项目崩溃了,除了异常

  

java.lang.OutOfMemoryError:超出了GC开销限制

apache poi表现不佳还是我做错了什么?

编辑:我以前使用的是.xlsm文件(一个启用了宏的excel文件)。我再次将其另存为.xlsx文件(禁用了宏),并将堆大小增加到4GB。现在,在我的Eclipse应用程序崩溃之前,java大约需要15分钟才能占用4GB的RAM(= 90%)和90%的CPU。 我使用的是apache poi 3.16,并将我的maven pom文件更新为使用4.0.0(最新版本),但是此新版本的工作方式有所不同,因此我遇到了很多异常,例如:

  

org.apache.poi.ooxml.POIXMLException:   org.apache.xmlbeans.XmlOptions.setEntityExpansionLimit(I)Lorg / apache / xmlbeans / XmlOptions;     在   org.apache.poi.ooxml.POIXMLFactory.createDocumentPart(POIXMLFactory.java:66)     在   org.apache.poi.ooxml.POIXMLDocumentPart.read(POIXMLDocumentPart.java:648)     在org.apache.poi.ooxml.POIXMLDocument.load(POIXMLDocument.java:180)     在   org.apache.poi.xssf.usermodel.XSSFWorkbook。(XSSFWorkbook.java:286)     在   org.apache.poi.xssf.usermodel.XSSFWorkbookFactory.createWorkbook(XSSFWorkbookFactory.java:83)     在   org.apache.poi.xssf.usermodel.XSSFWorkbookFactory.createWorkbook(XSSFWorkbookFactory.java:111)

     

原因:java.lang.NoSuchMethodError:   org.apache.xmlbeans.XmlOptions.setEntityExpansionLimit(I)Lorg / apache / xmlbeans / XmlOptions;     在   org.apache.poi.ooxml.POIXMLTypeLoader。(POIXMLTypeLoader.java:43)     在org.apache.poi.xssf.model.ThemesTable。(ThemesTable.java:86)

1 个答案:

答案 0 :(得分:0)

我删除了所有单元格格式和宏,因此基本上excel文件现在只是黑色文本,并且apache poi不再崩溃。