【问题标题】:How to free up the memory from a Apache POI workbook once the task is over?任务结束后如何从 Apache POI 工作簿中释放内存?
【发布时间】:2017-05-09 15:36:32
【问题描述】:


我打开了一个大的 excel 文件作为 Apache POI 工作簿(使用 VM args 设置最大内存大小)

成功打开文件后,我读取了所需的数据并完成了我的工作。

现在我想继续进行其他任务的编程,但在此之前,我想确保我释放了用于工作簿的内存。

我检查了 API 文档,但没有像 workbook.close() 这样的东西。

有人可以建议什么是释放工作簿占用的内存的正确方法吗?

【问题讨论】:

    标签: java memory apache-poi


    【解决方案1】:

    我相信你只需要让对象超出范围并让 GC 完成它的工作。您可能还需要考虑使用流式 POI 框架,因为它使用的内存更少。

    Streaming Workbook

    【讨论】:

    • 是的。此外,如果 close 方法存在,它更有可能不会尝试释放分配的内存。在 java 中清理未使用内存的最佳方法是消除过时的引用(参见有效的 java 2nd edition)。
    • 我尝试强制 GC 清理内存,即使在我关闭工作簿之后也是如此。但是,这并没有改变内存占用空间,当我尝试为另一个工作簿重新定位内存并在某个时候处理它时,我从 JVM 得到了 outOfMemory 异常。
    【解决方案2】:

    从 javadoc 看来,您只需要放开工作簿的句柄,它就会被垃圾收集。

    【讨论】:

      【解决方案3】:

      至少在最新版本中支持Workbook.close(),并且完全支持link for apache poi maven

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-08-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-05-15
        相关资源
        最近更新 更多