我怎样才能释放XSSFWorkbook所拥有的内存?

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

所以我想如果我可以释放三个XSSF工作簿所拥有的内存,它可能会给我足够的内存来完成输出文件的写入,但是看起来并不是close()指令。

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

有谁知道closuresXSSF工作簿并回收所需内存的“正确”方法?

我正在运行Java 1.8.0_25。

尝试使用SXSSFWorkbook而不是XSSFWorkbook。 它被devise成将行刷入磁盘而不是将其保存在内存中。

你很可能会坚持一些阅读工作表数据,否则应该收集垃圾。

您可以

  • 使用jvisualvm (包含在您的JDK中)来查找内存泄漏,
  • 在释放对工作表的所有引用后,尝试Runtime.getRuntime().gc()
  • 看看stream媒体用户模式API生成新的文件,希望less内存要求。