Java gc超出怎么处理_java – Apache POI超出了GC开销限制

我有13个.xlsx文件,每个文件大约有1000行.现在我想用一张表将它合并到一个.xlsx文件中.我在这里使用代码

http://blog.sodhanalibrary.com/2014/11/merge-excel-files-using-java.html#.Vi9ns36rSUk.

这是我的代码(几个更改,addSheet方法不变)

try {

FileInputStream excellFile1 = new FileInputStream(new File("tmp_testOut1000.xlsx"));

XSSFWorkbook workbook1 = new XSSFWorkbook(excellFile1);

XSSFSheet sheet1 = workbook1.getSheetAt(0);

for(int i = 2; i < 14; i++){

FileInputStream excellFile2 = new FileInputStream(new File("tmp_testOut" + i + "000.xlsx"));

XSSFWorkbook workbook2 = new XSSFWorkbook(excellFile2);

XSSFSheet sheet2 = workbook2.getSheetAt(0);

System.out.println("add " + i);

addSheet(sheet1,sheet2);

}

excellFile1.close();

// save merged file

System.out.println("merging");

File mergedFile = new File("merged.xlsx");

if (!mergedFile.exists()) {

mergedFile.createNewFile();

}

FileOutputStream out = new FileOutputStream(mergedFile);

System.out.println("write");

workbook1.write(out);

out.close();

System.out.println("Files were merged succussfully");

} catch (Exception e) {

e.printStackTrace();

}

所有文件都在加载和合并但是在“写入”sysout后我得到了

Exception in thread "main" java.lang.OutOfMemoryError: GC overhead limit exceeded

at org.apache.xmlbeans.impl.store.Xobj.new_cursor(Xobj.java:1829)

at org.apache.xmlbeans.impl.values.XmlObjectBase.newCursor(XmlObjectBase.java:293)

at org.apache.xmlbeans.impl.values.XmlComplexContentImpl.arraySetterHelper(XmlComplexContentImpl.java:1151)

at org.openxmlformats.schemas.spreadsheetml.x2006.main.impl.CTFontsImpl.setFontArray(Unknown Source)

at org.apache.poi.xssf.model.StylesTable.writeTo(StylesTable.java:424)

at org.apache.poi.xssf.model.StylesTable.commit(StylesTable.java:496)

at org.apache.poi.POIXMLDocumentPart.onSave(POIXMLDocumentPart.java:341)

at org.apache.poi.POIXMLDocumentPart.onSave(POIXMLDocumentPart.java:345)

at org.apache.poi.POIXMLDocument.write(POIXMLDocument.java:206)

at Start.main(Start.java:275)

我能做什么?为什么会发生这种情况以及如何预防?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值