2014-09-26 147 views
0

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

谢谢!

+0

您是否尝试阅读[Apache POI FAQ条目“我认为POI使用的内存太多了!我能做什么?”](http://poi.apache.org/faq.html#faq-N10109) – Gagravarr 2014-09-26 22:30:35

回答

-1

试试Apache POI的最新版本(stable!)。

替代品可能是smartXLS

-1

当面临的最常见的OutOfMemoryError,即一个“java.lang.OutOfMemoryError:Java堆空间”,一些简单的方面,必须首先理解。

允许Java应用程序使用有限的内存量。此限制在应用程序启动过程中指定。为了使事情更复杂,Java内存被分隔成不同的区域,分别称为堆空间和permgen。

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

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

在此基础上简单的描述,你有两个选择

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

给予更多的空间是很容易的大小 - 只需通过更改-Xmx参数来增加堆大小,类似于下面给出Java堆1G堆玩的示例:

java -Xmx1024m com.mycompany.MyClass 

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

在你的情况下,读取小批量数据和每批处理数据可能是一种选择。