Apache POI WorkbookFactory.create导致java.lang.OutOfMemoryError:java堆空间
我试图从Vultr.com启动服务器上的.jar文件,但每次启动时都会出现错误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
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值