首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用XSSF的OutOfMemory或GC开销

使用XSSF的OutOfMemory或GC开销
EN

Stack Overflow用户
提问于 2016-08-24 19:05:43
回答 1查看 351关注 0票数 0

目前我们正在使用XSSF将存储在DB中的记录导出到excel并下载它。根据我们的要求,我们需要允许用户下载300万条记录。

使用XSSF,我们将面临OutOfMemoryError:超出GC开销限制。

我做了一些研究,发现XSSF非常需要内存。能不能有人给我提个建议,让我更好地满足我的要求。请注意,我需要下载excel格式的数据,不想显式写入任何磁盘。

EN

回答 1

Stack Overflow用户

发布于 2016-08-24 19:25:46

您可以使用POI API。我们已经使用POI API在我们的程序中成功地实现了大型excel文件的流式处理。保持较低的内存行大小很重要,剩下的基本上都是在磁盘上完成的。

您还可以设置: SXSSFWorkbook.setCompressTempFiles,以防止临时XML文件在磁盘上变大。

使用flushRows()可以手动将行刷新到磁盘。

但是,这会更慢。但是,如果内存是一个约束,那么唯一的选择。

请记住,有些方法会隐式访问行。如果这些行已经被交换到磁盘,你将会遇到错误,我相信API只用于写入大的excel文件。

代码语言:javascript
复制
public static void main(String[] args) throws Throwable {
        SXSSFWorkbook wb = new SXSSFWorkbook(); 
        wb.setCompressTempFiles(true);

        SXSSFSheet sh = (SXSSFSheet) wb.getSheetAt(0);
        sh.setRandomAccessWindowSize(100);// keep 100 rows in memory, exceeding rows will be flushed to disk, this is also the default
        for(int i=  1; i < 100000; i++){
          Row row = sh.createRow(i);  // do something with the row
        }
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39121592

复制
相关文章

相似问题

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