Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/377.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
Apache POI WorkbookFactory.create导致java.lang.OutOfMemoryError:java堆空间_Java_Server_Apache Poi_Heap - Fatal编程技术网

Apache POI WorkbookFactory.create导致java.lang.OutOfMemoryError:java堆空间

Apache POI WorkbookFactory.create导致java.lang.OutOfMemoryError:java堆空间,java,server,apache-poi,heap,Java,Server,Apache Poi,Heap,我试图从Vultr.com启动服务器上的.jar文件,但每次启动时都会出现错误 String excelFolder = Main.class.getProtectionDomain().getCodeSource().getLocation().getPath().replace("heroesBot.jar", ""); DataFormatter dataFormatter = new DataFormatter(); try(InputStream input

我试图从Vultr.com启动服务器上的.jar文件,但每次启动时都会出现错误

    String excelFolder = Main.class.getProtectionDomain().getCodeSource().getLocation().getPath().replace("heroesBot.jar", "");
    DataFormatter dataFormatter = new DataFormatter();


    try(InputStream inputStream = new FileInputStream(excelFolder + "Summon.xlsx")) {


        Workbook wb = WorkbookFactory.create(inputStream);
        Sheet sheet = wb.getSheetAt(0);
        wb.close();
创建工作簿的行总是导致错误。我能做些什么吗

文件大小为96KB

以下是错误:

java.io.IOException: Java heap space
    at org.apache.poi.ss.usermodel.WorkbookFactory.createWorkbook(WorkbookFactory.java:353)
    at org.apache.poi.ss.usermodel.WorkbookFactory.createXSSFWorkbook(WorkbookFactory.java:316)
    at org.apache.poi.ss.usermodel.WorkbookFactory.create(WorkbookFactory.java:234)
    at org.apache.poi.ss.usermodel.WorkbookFactory.create(WorkbookFactory.java:200)
    at heroes.Section.createKeys(Section.java:33)
    at main.Main.main(Main.java:37)
Caused by: java.lang.OutOfMemoryError: Java heap space
    at java.base/java.util.regex.Matcher.<init>(Matcher.java:248)
    at java.base/java.util.regex.Pattern.matcher(Pattern.java:1133)
    at org.apache.poi.ss.util.CellReference.separateRefParts(CellReference.java:396)
    at org.apache.poi.ss.util.CellReference.<init>(CellReference.java:113)
    at org.apache.poi.xssf.usermodel.XSSFCell.<init>(XSSFCell.java:119)
    at org.apache.poi.xssf.usermodel.XSSFRow.<init>(XSSFRow.java:77)
    at org.apache.poi.xssf.usermodel.XSSFSheet.initRows(XSSFSheet.java:268)
    at org.apache.poi.xssf.usermodel.XSSFSheet.read(XSSFSheet.java:231)
    at org.apache.poi.xssf.usermodel.XSSFSheet.onDocumentRead(XSSFSheet.java:218)
    at org.apache.poi.xssf.usermodel.XSSFWorkbook.parseSheet(XSSFWorkbook.java:448)
    at org.apache.poi.xssf.usermodel.XSSFWorkbook.onDocumentRead(XSSFWorkbook.java:413)
    at org.apache.poi.ooxml.POIXMLDocument.load(POIXMLDocument.java:184)
    at org.apache.poi.xssf.usermodel.XSSFWorkbook.<init>(XSSFWorkbook.java:282)
    at org.apache.poi.xssf.usermodel.XSSFWorkbookFactory.createWorkbook(XSSFWorkbookFactory.java:88)
java.io.IOException:java堆空间
位于org.apache.poi.ss.usermodel.WorkbookFactory.create工作簿(WorkbookFactory.java:353)
位于org.apache.poi.ss.usermodel.WorkbookFactory.createXSSFWorkbook(WorkbookFactory.java:316)
位于org.apache.poi.ss.usermodel.WorkbookFactory.create(WorkbookFactory.java:234)
位于org.apache.poi.ss.usermodel.WorkbookFactory.create(WorkbookFactory.java:200)
在heroes.Section.createKeys(Section.java:33)
在main.main.main(main.java:37)
原因:java.lang.OutOfMemoryError:java堆空间
位于java.base/java.util.regex.Matcher.(Matcher.java:248)
位于java.base/java.util.regex.Pattern.matcher(Pattern.java:1133)
位于org.apache.poi.ss.util.CellReference.separateRefParts(CellReference.java:396)
位于org.apache.poi.ss.util.CellReference(CellReference.java:113)
位于org.apache.poi.xssf.usermodel.XSSFCell.(XSSFCell.java:119)
位于org.apache.poi.xssf.usermodel.XSSFRow.(XSSFRow.java:77)
位于org.apache.poi.xssf.usermodel.XSSFSheet.initRows(XSSFSheet.java:268)
位于org.apache.poi.xssf.usermodel.XSSFSheet.read(XSSFSheet.java:231)
位于org.apache.poi.xssf.usermodel.XSSFSheet.onDocumentRead(XSSFSheet.java:218)
位于org.apache.poi.xssf.usermodel.XSSFWorkbook.parseSheet(XSSFWorkbook.java:448)
在org.apache.poi.xssf.usermodel.XSSFWorkbook.onDocumentRead(XSSFWorkbook.java:413)
位于org.apache.poi.ooxml.POIXMLDocument.load(POIXMLDocument.java:184)
位于org.apache.poi.xssf.usermodel.XSSFWorkbook.(XSSFWorkbook.java:282)
位于org.apache.poi.xssf.usermodel.XSSFWorkbookFactory.create工作簿(XSSFWorkbookFactory.java:88)

服务器有多少内存并不重要。重要的是,您为应用程序提供了多少内存(允许应用程序使用多少内存)。请尝试以下命令:

java -Xmx256M -jar your.jar
这意味着您允许应用程序使用256 MB RAM。如果不够,请使用更大的值

更新


基于堆栈跟踪,正则表达式的处理占用大量内存。POI广泛使用正则表达式,例如处理单元格引用。可能您的Excel工作表包含一个带有单元格引用的公式,该公式会导致POI消耗大量内存来处理此正则表达式。检查Excel工作表中的公式。

应用程序/服务器使用了多少内存?服务器的RAM为1024 MB。您可以链接/上载有问题的Excel文件吗?您是否尝试读取其他excel文件(存在相同的错误)?使用POI读取excel工作表时会消耗大量内存。您可能希望尝试直接从
文件
读取,而不是使用
输入流
,如果这不起作用,您将需要查看Excel工作表的数据流,而不是将其完全读取到内存中。不起作用。我已经将此命令用于多个RAM值