Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Apache POI_Java_Excel_Out Of Memory_Apache Poi_Heap - Fatal编程技术网

Java Apache POI

Java Apache POI,java,excel,out-of-memory,apache-poi,heap,Java,Excel,Out Of Memory,Apache Poi,Heap,我正在从一个excel文档中读取数据,该文档每两周更新一次,大约50000行数据,在开始新的工作表之前可能会达到120000行。我正在使用ApachePOI获取数据。我在下面得到了这个例外,但我相信最重要的一个例外是 原因:java.lang.OutOfMemoryError:java堆空间。我在另一张excel表格上测试了我的代码,数据较少,并且能够读取数据 如果您对如何阅读大型excel文档有任何方法或建议,请与他人分享 org.apache.poi.POIXMLException: jav

我正在从一个excel文档中读取数据,该文档每两周更新一次,大约50000行数据,在开始新的工作表之前可能会达到120000行。我正在使用ApachePOI获取数据。我在下面得到了这个例外,但我相信最重要的一个例外是 原因:java.lang.OutOfMemoryError:java堆空间。我在另一张excel表格上测试了我的代码,数据较少,并且能够读取数据

如果您对如何阅读大型excel文档有任何方法或建议,请与他人分享

org.apache.poi.POIXMLException: java.lang.reflect.InvocationTargetException
    at org.apache.poi.xssf.usermodel.XSSFFactory.createDocumentPart(XSSFFactory.java:62)
    at org.apache.poi.POIXMLDocumentPart.read(POIXMLDocumentPart.java:456)
    at org.apache.poi.POIXMLDocumentPart.read(POIXMLDocumentPart.java:461)
    at org.apache.poi.POIXMLDocumentPart.read(POIXMLDocumentPart.java:461)
    at org.apache.poi.POIXMLDocumentPart.read(POIXMLDocumentPart.java:461)
    at org.apache.poi.POIXMLDocument.load(POIXMLDocument.java:162)
    at org.apache.poi.xssf.usermodel.XSSFWorkbook.<init>(XSSFWorkbook.java:271)
    at excelreader.readExcelFile(excelreader.java:28)
    at excelreader.main(excelreader.java:18)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:140)
Caused by: java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:422)
    at org.apache.poi.xssf.usermodel.XSSFFactory.createDocumentPart(XSSFFactory.java:60)
    ... 13 more
Caused by: java.lang.OutOfMemoryError: Java heap space
    at org.apache.xmlbeans.impl.store.Cur.createElementXobj(Cur.java:260)
    at org.apache.xmlbeans.impl.store.Cur$CurLoadContext.startElement(Cur.java:2995)
    at org.apache.xmlbeans.impl.store.Locale$SaxHandler.startElement(Locale.java:3207)
    at org.apache.xmlbeans.impl.piccolo.xml.Piccolo.reportStartTag(Piccolo.java:1082)
    at org.apache.xmlbeans.impl.piccolo.xml.PiccoloLexer.parseAttributesNS(PiccoloLexer.java:1822)
    at org.apache.xmlbeans.impl.piccolo.xml.PiccoloLexer.parseOpenTagNS(PiccoloLexer.java:1521)
    at org.apache.xmlbeans.impl.piccolo.xml.PiccoloLexer.parseTagNS(PiccoloLexer.java:1362)
    at org.apache.xmlbeans.impl.piccolo.xml.PiccoloLexer.yylex(PiccoloLexer.java:4678)
    at org.apache.xmlbeans.impl.piccolo.xml.Piccolo.yylex(Piccolo.java:1290)
    at org.apache.xmlbeans.impl.piccolo.xml.Piccolo.yyparse(Piccolo.java:1400)
    at org.apache.xmlbeans.impl.piccolo.xml.Piccolo.parse(Piccolo.java:714)
    at org.apache.xmlbeans.impl.store.Locale$SaxLoader.load(Locale.java:3454)
    at org.apache.xmlbeans.impl.store.Locale.parseToXmlObject(Locale.java:1276)
    at org.apache.xmlbeans.impl.store.Locale.parseToXmlObject(Locale.java:1263)
    at org.apache.xmlbeans.impl.schema.SchemaTypeLoaderBase.parse(SchemaTypeLoaderBase.java:345)
    at org.openxmlformats.schemas.spreadsheetml.x2006.main.CTPivotCacheRecords$Factory.parse(Unknown Source)
    at org.apache.poi.xssf.usermodel.XSSFPivotCacheRecords.readFrom(XSSFPivotCacheRecords.java:62)
    at org.apache.poi.xssf.usermodel.XSSFPivotCacheRecords.<init>(XSSFPivotCacheRecords.java:53)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:422)
    at org.apache.poi.xssf.usermodel.XSSFFactory.createDocumentPart(XSSFFactory.java:60)
    at org.apache.poi.POIXMLDocumentPart.read(POIXMLDocumentPart.java:456)
    at org.apache.poi.POIXMLDocumentPart.read(POIXMLDocumentPart.java:461)
    at org.apache.poi.POIXMLDocumentPart.read(POIXMLDocumentPart.java:461)
    at org.apache.poi.POIXMLDocumentPart.read(POIXMLDocumentPart.java:461)
    at org.apache.poi.POIXMLDocument.load(POIXMLDocument.java:162)
    at org.apache.poi.xssf.usermodel.XSSFWorkbook.<init>(XSSFWorkbook.java:271)
    at excelreader.readExcelFile(excelreader.java:28)
    at excelreader.main(excelreader.java:18)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
org.apache.poi.POIXMLException:java.lang.reflect.InvocationTargetException
位于org.apache.poi.xssf.usermodel.XSSFFactory.createDocumentPart(XSSFFactory.java:62)
在org.apache.poi.poimmldocumentpart.read(poimmldocumentpart.java:456)
在org.apache.poi.poimmldocumentpart.read上(poimmldocumentpart.java:461)
在org.apache.poi.poimmldocumentpart.read上(poimmldocumentpart.java:461)
在org.apache.poi.poimmldocumentpart.read上(poimmldocumentpart.java:461)
位于org.apache.poi.POIXMLDocument.load(POIXMLDocument.java:162)
位于org.apache.poi.xssf.usermodel.XSSFWorkbook.(XSSFWorkbook.java:271)
在excelreader.readExcelFile(excelreader.java:28)中
位于excelreader.main(excelreader.java:18)
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)中
位于java.lang.reflect.Method.invoke(Method.java:497)
位于com.intellij.rt.execution.application.AppMain.main(AppMain.java:140)
原因:java.lang.reflect.InvocationTargetException
位于sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法)
位于sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
在sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
位于java.lang.reflect.Constructor.newInstance(Constructor.java:422)
位于org.apache.poi.xssf.usermodel.XSSFFactory.createDocumentPart(XSSFFactory.java:60)
... 还有13个
原因:java.lang.OutOfMemoryError:java堆空间
在org.apache.xmlbeans.impl.store.Cur.createElementXobj(Cur.java:260)上
位于org.apache.xmlbeans.impl.store.Cur$CurLoadContext.startElement(Cur.java:2995)
位于org.apache.xmlbeans.impl.store.Locale$SaxHandler.startElement(Locale.java:3207)
位于org.apache.xmlbeans.impl.piccolo.xml.piccolo.reportStartTag(piccolo.java:1082)
位于org.apache.xmlbeans.impl.piccolo.xml.PiccoloLexer.parseAttributesNS(PiccoloLexer.java:1822)
位于org.apache.xmlbeans.impl.piccolo.xml.PiccoloLexer.parseOpenTagNS(PiccoloLexer.java:1521)
位于org.apache.xmlbeans.impl.piccolo.xml.PiccoloLexer.parseTagNS(PiccoloLexer.java:1362)
位于org.apache.xmlbeans.impl.piccolo.xml.PiccoloLexer.yylex(PiccoloLexer.java:4678)
位于org.apache.xmlbeans.impl.piccolo.xml.piccolo.yylex(piccolo.java:1290)
请访问org.apache.xmlbeans.impl.piccolo.xml.piccolo.yyprase(piccolo.java:1400)
位于org.apache.xmlbeans.impl.piccolo.xml.piccolo.parse(piccolo.java:714)
位于org.apache.xmlbeans.impl.store.Locale$SaxLoader.load(Locale.java:3454)
位于org.apache.xmlbeans.impl.store.Locale.parseToXmlObject(Locale.java:1276)
位于org.apache.xmlbeans.impl.store.Locale.parseToXmlObject(Locale.java:1263)
在org.apache.xmlbeans.impl.schema.SchemaTypeLoaderBase.parse(SchemaTypeLoaderBase.java:345)
位于org.openxmlformats.schemas.spreadsheetml.x2006.main.CTPivotCacheRecords$Factory.parse(未知源)
位于org.apache.poi.xssf.usermodel.XSSFPivotCacheRecords.readFrom(XSSFPivotCacheRecords.java:62)
位于org.apache.poi.xssf.usermodel.XSSFPivotCacheRecords。(XSSFPivotCacheRecords.java:53)
位于sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法)
位于sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
在sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
位于java.lang.reflect.Constructor.newInstance(Constructor.java:422)
位于org.apache.poi.xssf.usermodel.XSSFFactory.createDocumentPart(XSSFFactory.java:60)
在org.apache.poi.poimmldocumentpart.read(poimmldocumentpart.java:456)
在org.apache.poi.poimmldocumentpart.read上(poimmldocumentpart.java:461)
在org.apache.poi.poimmldocumentpart.read上(poimmldocumentpart.java:461)
在org.apache.poi.poimmldocumentpart.read上(poimmldocumentpart.java:461)
位于org.apache.poi.POIXMLDocument.load(POIXMLDocument.java:162)
位于org.apache.poi.xssf.usermodel.XSSFWorkbook.(XSSFWorkbook.java:271)
在excelreader.readExcelFile(excelreader.java:28)中
位于excelreader.main(excelreader.java:18)
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处

试试
java.exe-Xmx512m-jaryourjar.jar


它将最大堆大小设置为512 MB。如果512不够,也可以尝试更大的值。

1.解决java中OutOfMemoryError的简单方法是使用JVM选项增加最大堆大小
“-Xmx512M”
,这将立即解决OutOfMemoryError

Java虚拟机(JVM)以固定的内存上限运行,您可以通过以下方式对其进行修改:

-Xms<size> - Set initial Java heap size
-Xmx<size> - Set maximum Java heap size

$ java -Xms512m -Xmx1024m JavaApp
-Xms-设置初始Java堆大小
-Xmx-设置最大Java堆大小
$java-Xms512m-Xmx1024m JavaApp
2.在Java中解决OutOfMemoryError的第二种方法相当困难,当您没有太多内存时,即使在增加最大堆大小后,您仍然会得到Java.lang.OutOfMemoryError,在这种情况下,您可能需要分析应用程序并查找内存泄漏。

所以要检查内存皮带,你可以使用一些工具。没有它是非常困难的。其中一些流行的是:

是JDK6附带的一个命令行实用程序,允许您在文件中获取堆的内存转储。它很容易使用,如下所示:

jmap-dump:for