我的文件 9MB ,我在加载工作簿时遇到此错误。
XSSFWorkbook workbook = new XSSFWorkbook(excelFilePath);
此行导致java.lang.OutOfMemoryError: Java heap space
我该如何解决这个问题?
答案 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)
答案 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