java.lang.OutOfMemoryError:使用Apache POI读取excel时的Java堆空间

时间:2011-05-20 09:18:36

标签: java apache-poi

我的文件 9MB ,我在加载工作簿时遇到此错误。

XSSFWorkbook workbook = new XSSFWorkbook(excelFilePath); 

此行导致java.lang.OutOfMemoryError: Java heap space

我该如何解决这个问题?

5 个答案:

答案 0 :(得分:24)

首先要检查的是 - 您是否使用 InputStream 文件打开 XSSFWorkbook ?用File is much lower memory打开它。

接下来,你想读或写吗?如果你的内存非常紧张,那么在sax中使用XSSF还有其他选择。

有关阅读的信息,请参阅http://poi.apache.org/spreadsheet/how-to.html#xssf_sax_api了解有关使用XSSF + Sax的详细信息。作为另一种选择,如果您只想获取文件的文本内容,那么看起来Apache Tika使用POI为.xlsx文件提供了基于事件的文本提取器。

对于写作,最近关于改进“大网格演示”的POI开发列表已经有很多讨论。您可能想要关注那些 - http://poi.apache.org/mailinglists.html

答案 1 :(得分:8)

我认为默认堆大小是128M

您可以使用java

-Xmx参数来增加此值

e.g。

java -Xmx512m myapp.java

答案 2 :(得分:3)

正如其他人所建议的那样,首先要做的是增加堆大小。

如果这没有用,或者您希望更大的文件,您还应该看一下这个答案:Processing large xlsx file in Java

如果标准的“阅读所有内容”模式对你不起作用,它可以提供一些很好的起点。

答案 3 :(得分:2)

我认为32位JVM最大内存为2GB。但这可能已经过时了。如果我理解正确,你在Eclipse启动器上设置-Xmx。如果要增加从Eclipse运行的程序的内存,则应在“运行 - >运行配置...”中定义-Xmx(选择您的类并打开Arguments选项卡将其放入VM参数区域)菜单,而不是Eclipse启动

编辑:您要求的详细信息。在Eclipse 3.4中

1)运行 - >运行配置...

2)如果您的类未在“Java Application”子树的左侧列表中列出,请单击左上角的“New Launch configuration”

2b)在右侧,“Main”选项卡确保项目和班级是正确的

3)选择右侧的“参数”选项卡。这个有两个文本区域。一个用于程序参数,该参数进入提供给main方法的args []数组。另一个用于VM参数。使用VM参数(低一个iirc)放入以下内容: -Xmx2048m

我认为1024米应该足以满足您的需求!

4)单击“应用”,然后单击“运行”

如果它仍然没有堆空间,你仍然可以将数字更改为更高的值,例如你可以把-Xmx4g从2千兆字节增加到4千兆字节

答案 4 :(得分:1)

增加堆大小:

  

-Xms256m -Xmx512m -XX:PermSize = 64M -XX:MaxPermSize = 1000M

应将这些值提供给VM。

看看链接,这应该可以帮到你

http://www.javabeat.net/tips/192-javalangoutofmemoryerror-java-heap-space.html