简体   繁体   English

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

[英]Java - Apache poi leads to java.lang.OutOfMemoryError: GC overhead limit exceeded

I am trying to open an excel file which is 22MB in size and contains 9905 rows (not that large in my opinion). 我正在尝试打开一个大小为22MB的Excel文件,其中包含9905行(在我看来不是那么大)。

I try to open it like this with java apache poi : 我尝试用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();

After a few seconds, java takes about 3.3GB of RAM and 90% of CPU and after a minute or so my eclipse project crashes with the exception 几秒钟后,Java占用了大约3.3GB的RAM和90%的CPU,大约一分钟后,我的Eclipse项目崩溃了,但异常

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

Is apache poi just very unperformant or am I doing something wrong? apache poi表现不佳还是我做错了什么?

Edit: I was previously using a .xlsm file (an excel file with macros enabled). 编辑:我以前使用的是.xlsm文件(启用了宏的Excel文件)。 I saved it again as a .xlsx file (macros disabled) and increased the heap size to 4GB . 我将其再次保存为.xlsx文件(禁用了宏),并将堆大小增加到4GB Now java takes 4GB of RAM (=90%) and 90% of CPU for around ~15 minutes before my eclipse application crashes. 现在,在我的Eclipse应用程序崩溃之前,java大约需要15分钟才能占用4GB的RAM(= 90%)和90%的CPU。 I was using apache poi 3.16 and updated my maven pom file to use 4.0.0 (latest version) but this new version works differently so I get a lot of exceptions, eg: 我正在使用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.POIXMLException:org.apache.xmlbeans.XmlOptions.setEntityExpansionLimit(I)Lorg / apache / xmlbeans / XmlOptions; at org.apache.poi.ooxml.POIXMLFactory.createDocumentPart(POIXMLFactory.java:66) at org.apache.poi.ooxml.POIXMLDocumentPart.read(POIXMLDocumentPart.java:648) at org.apache.poi.ooxml.POIXMLDocument.load(POIXMLDocument.java:180) at org.apache.poi.xssf.usermodel.XSSFWorkbook.(XSSFWorkbook.java:286) at org.apache.poi.xssf.usermodel.XSSFWorkbookFactory.createWorkbook(XSSFWorkbookFactory.java:83) at org.apache.poi.xssf.usermodel.XSSFWorkbookFactory.createWorkbook(XSSFWorkbookFactory.java:111) 在org.apache.poi.ooxml.POIXMLDocument.read(POIXMLDocumentPart.java:648)在org.apache.poi.ooxml.POIXMLFactory.createDocumentPart(POIXMLFactory.java:66)在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) .apache.poi.xssf.usermodel.XSSFWorkbookFactory.createWorkbook(XSSFWorkbookFactory.java:111)

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 Apache POI autoColumnWidth java.lang.OutOfMemoryError:超出GC开销限制 - Apache POI autoColumnWidth java.lang.OutOfMemoryError: GC overhead limit exceeded java.lang.OutOfMemoryError:使用Apache POI读取Excel文件时,超出了GC开销限制 - java.lang.OutOfMemoryError: GC overhead limit exceeded" while reading excel file using apache POI Java PreparedStatement java.lang.OutOfMemoryError:超出了GC开销限制 - Java PreparedStatement java.lang.OutOfMemoryError: GC overhead limit exceeded java.lang.OutOfMemoryError:超出GC开销限制,通过Apache POI读取启用宏的Excel工作表时出错 - java.lang.OutOfMemoryError: GC overhead limit exceeded Error while Reading Macro enabled excel sheet through Apache POI 詹金斯 java.lang.OutOfMemoryError:超出 GC 开销限制 - Jenkins java.lang.OutOfMemoryError: GC overhead limit exceeded java.lang.OutOfMemoryError:GC开销限制超出了android studio - java.lang.OutOfMemoryError: GC overhead limit exceeded android studio Gridgain:java.lang.OutOfMemoryError:超出了GC开销限制 - Gridgain: java.lang.OutOfMemoryError: GC overhead limit exceeded Spark失败了java.lang.OutOfMemoryError:超出了GC开销限制? - Spark fails with java.lang.OutOfMemoryError: GC overhead limit exceeded? SonarQube java.lang.OutOfMemoryError:超出了GC开销限制 - SonarQube java.lang.OutOfMemoryError: GC overhead limit exceeded Tomcat java.lang.OutOfMemoryError:超出了GC开销限制 - Tomcat java.lang.OutOfMemoryError: GC overhead limit exceeded
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM