我怎样才能释放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内存要求。