[英]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.