XSSFWorkbook内存问题

时间:2014-04-11 04:12:09

标签: java excel memory out

我们有一个要求,我们必须从数据库中获取xlsx文件,然后再添加4张表。

我已经编写了以下代码来完成同样的工作。

代码:

OPCPackage opcPackage=OPCPackage.open(tempExcelFile);
XSSFWorkbook xworkbook=new XSSFWorkbook(opcPackage);    
SXSSFWorkbook dbWorkBook = new SXSSFWorkbook(xworkbook, ApplicationConstants.FLUSH_LIMIT);
    // add sheets to dbworkBook

现在数据库中excel文件的大小约为10Mb,我在

获得了一个OOM异常
XSSFWorkbook xworkbook=new XSSFWorkbook(opcPackage);    

我的内存设置为-Xms512m -Xmx1024m,我无法更改此号码。我见过一些事件API has been asked to be used to solve the memory issue

的解决方案

我的问题是,即使我使用事件api读取行,如何将其写回SXSSFWorkbook对象,以便我可以再添加4张表。

1 个答案:

答案 0 :(得分:0)

这里你固有的问题是你正在使用非常大的ex​​cel文档,只需要很少的内存。我曾经解析xlsx文档一段时间,他们可以占用大量的内存来解析。我希望在内存中解压缩时,一个10 MB的xlsx文件需要在1.5-2.5 GB内存中占据一席之地。

您正在遇到xlsx格式的基本问题(如果您不知道,基本上只是一堆压缩的XML文档)。除非你有很多值得记忆的游戏,否则我真的不能建议尝试打开xlsx文件> 2 MB。