如何释放XSSFWorkbook所拥有的内存?

时间:2014-11-14 15:33:07

标签: java excel xssf

我编写了一些Java代码,它从三个电子表格中获取信息,并在具有4GB内存的计算机上生成一个大型电子表格(10列,26,950行)。它正在生成电子表格(内存不足)时崩溃,但通过重写代码以一次读取100行的大型电子表格,我已经设法达到了编写输出文件的程度因为它遇到内存不足错误。

所以我想我是否可以释放三个XSSF工作簿所占用的内存,它可能会给我足够的内存来完成输出文件的写入 - 但似乎没有close()指令。

我已经尝试将工作簿设置为null,但我不相信会释放任何内存。

是否有人知道关闭XSSF工作簿并回收其占用的内存的“正确”方法?

我正在运行Java 1.8.0_25。

2 个答案:

答案 0 :(得分:1)

您很可能会保留一些读取的工作表数据,否则应该收集垃圾。

你可以

  • 使用 jvisualvm (包含在您的JDK中)查找内存泄漏,
  • 在释放对工作表的所有引用后,尝试Runtime.getRuntime().gc()获取显式GC,
  • 查看streaming usermode API以生成新文件,希望减少内存需求。

答案 1 :(得分:0)

尝试使用SXSSFWorkbook代替XSSFWorkbook。它被设计为将行刷新到磁盘而不是将它们保存在内存中。