使用 Apache POI HSSF 时内存泄漏?

问题描述 投票:0回答:1

已广泛查看,但找不到明确的答案:使用 Apachie POI HSSF 创建的对象是由普通 Java gc 回收的,还是我需要做其他事情?

我有一个Java程序,可以读取测试数据文件并写入数据分析的xls文件。我注意到,每个处理的文件的工作集大小(由 Process Explorer 报告)会增大约 3MB,这让我怀疑(尽管显式调用了 gc)POI 对象(单元格、行、工作表)是即使每个文件写入后都没有指向它们的挥之不去的指针,也不会被回收。

我没有预料到这一点,因此代码当前每次需要时都会创建新对象(单元格等)。我看到的一个建议是创建一次所需的工作表、行、单元格,然后在写出每个 xls 文件之前继续在其中设置新值。这实际上会减少内存使用量,还是在单元格中设置新值也会消耗内存?

如果重要的话,我正在使用 poi-3.9-20121203

我遇到了一个问题,因为我现在有数千个文件需要处理,最终出现内存不足错误。 (出于各种原因,如果我可以一次完成所有这些,而不是一次完成 500 个,会容易得多。)

非常感谢您的任何建议和/或建议。

java apache apache-poi hssf
1个回答
-1
投票

我建议在流程结束时调用工作簿

.close()
方法。

© www.soinside.com 2019 - 2024. All rights reserved.