首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java堆空间甚至使用-Xmx1024m

Java堆空间甚至使用-Xmx1024m
EN

Stack Overflow用户
提问于 2022-06-16 08:49:16
回答 1查看 63关注 0票数 0

在我的项目中,我试图在DB2中复制一个大文件,并将其转换为Excel和iIhave

线程“主”java.lang.OutOfMemoryError中的异常:Java堆空间。

我试着使用-Xmx1024m,但它不起作用。该文件有1000000条记录,并在记录6043处停止。

代码语言:javascript
复制
int index = 1;

while (rs.next()) {
    XSSFRow row = sheet.createRow((short) index);
    for (int i = 0; i < columns; i++) {
        System.out.println(rs.getObject(i + 1).toString());
        XSSFCell cell = row.createCell((short) i);
        cell.setCellValue(rs.getObject(i + 1).toString());
        cell.setCellStyle(cellStyle2);

       // System.out.println("///// INDEX :  >>  " + index);
    }

    index++;
    
}

我的错误:

代码语言:javascript
复制
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
        at org.apache.xmlbeans.impl.store.Saver$TextSaver.resize(Saver.java:1700)
        at org.apache.xmlbeans.impl.store.Saver$TextSaver.preEmit(Saver.java:1303)
        at org.apache.xmlbeans.impl.store.Saver$TextSaver.emit(Saver.java:1190)
        at org.apache.xmlbeans.impl.store.Saver$TextSaver.emitElement(Saver.java:962)
        at org.apache.xmlbeans.impl.store.Saver.processElement(Saver.java:476)
        at org.apache.xmlbeans.impl.store.Saver.process(Saver.java:307)
        at org.apache.xmlbeans.impl.store.Saver$TextSaver.saveToString(Saver.java:1864)
        at org.apache.xmlbeans.impl.store.Cursor._xmlText(Cursor.java:546)
        at org.apache.xmlbeans.impl.store.Cursor.xmlText(Cursor.java:2436)
        at org.apache.xmlbeans.impl.values.XmlObjectBase.xmlText(XmlObjectBase.java:1500)
        at org.apache.poi.xssf.model.SharedStringsTable.getKey(SharedStringsTable.java:134)
        at org.apache.poi.xssf.model.SharedStringsTable.addEntry(SharedStringsTable.java:180)
        at org.apache.poi.xssf.usermodel.XSSFCell.setCellValue(XSSFCell.java:350)
        at org.apache.poi.xssf.usermodel.XSSFCell.setCellValue(XSSFCell.java:320)
        at fileconvertorv010.GerarExcel.<init>(GerarExcel.java:121)
        at fileconvertorv011.Main.main(Main.java:33)
Java Result: 1
EN

回答 1

Stack Overflow用户

发布于 2022-06-16 09:24:01

正如注释中提到的,有一种替代XSSFWorkbook,SXSSFWorkbook的方法

可以创建一个新的工作簿,您可以在其中指定要保存在内存中的行数。如果超过100记录,那么内存中的第一条记录将被刷新并从内存中移除,然后第二条记录被移除,依此类推(当您到达记录101时,您将无法访问记录0):

代码语言:javascript
复制
SXSSFWorkbook wb = new SXSSFWorkbook(100);

如果将-1作为参数传递给构造函数,也可以将记录保存在内存中,但可能会再次遇到OutOfMemoryError

代码语言:javascript
复制
SXSSFWorkbook wb = new SXSSFWorkbook(-1);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72643003

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档