【问题标题】:Heap space error with Apache POI XSSFApache POI XSSF 的堆空间错误
【发布时间】:2014-11-21 22:16:13
【问题描述】:

我正在尝试使用 Apache POI XSSF 库解析一个大型 excel 文件 (.xlsx)。在 100,000 行之后,它会引发堆空间错误。我尝试增加内存,但没有帮助。有解决此问题的方法吗?或者有人可以建议我使用另一个库来解析大型 excel 文件。

谢谢!

【问题讨论】:

标签: java out-of-memory apache-poi


【解决方案1】:

尝试 Apache POI 的最新(稳定!)版本。

替代品可能是smartXLS

【讨论】:

    【解决方案2】:
    【解决方案3】:

    面对最常见的OutOfMemoryError,即“java.lang.OutOfMemoryError: Java heap space”,首先要了解一些简单的方面。

    Java 应用程序可以使用有限的内存量。此限制在应用程序启动期间指定。为了让事情变得更复杂,Java 内存被分隔为不同的区域,称为堆空间和 permgen。

    这些区域的大小是在 Java 虚拟机 (JVM) 启动期间通过指定参数设置的,例如 -Xmx 和 -XX:MaxPermSize。如果您没有明确设置大小,将使用特定于平台的默认值。

    所以 – 当您尝试向堆空间区域添加更多数据但没有足够空间时,将触发“[java.lang.OutOfMemoryError: Java heap space][1]”错误。

    根据这个简单的描述,你有两个选择

    • 为数据结构提供更多空间
    • 减少使用的数据结构的大小

    提供更多空间很容易 - 只需通过更改 -Xmx 参数来增加堆大小,类似于以下示例,为您的 Java 进程提供 1G 的堆可供使用:

    java -Xmx1024m com.mycompany.MyClass
    

    减少数据结构的大小通常需要更多的努力,但这可能是为了摆脱潜在问题所必需的 - 提供更多空间有时只会掩盖症状并推迟不可避免的问题。例如,当面临内存泄漏时,您只是推迟了所有内存都被泄漏垃圾填满的时间。

    在您的情况下,以较小的批次读取数据并同时处理每个批次可能是一种选择。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多