日期:2014-05-20  浏览次数:20874 次

poi第二次导出excel出错
数据大概有5W多条;
第一次能成功导出,第二次导出就出错,必须得重启tomcat才能正常导出;
第二次导出报如下错:
java.lang.NullPointerException
Exception in thread "ContainerBackgroundProcessor[StandardEngine[Catalina]]" java.lang.OutOfMemoryError: Java heap space
2013-5-28 10:36:02 org.apache.coyote.http11.Http11Processor process
严重: Error processing request
java.lang.OutOfMemoryError: Java heap space
2013-5-28 10:36:07 org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler process
严重: Error reading request, ignored
java.lang.OutOfMemoryError: Java heap space
Excel poi

------解决方案--------------------
内存溢出,增加虚拟内存。
tomcat的catalina.bat文件最上面加入
set JAVA_OPTS= -Xms1024m -Xmx1024m
-Xms -Xmx一般配置成一样比较好。
------解决方案--------------------
内存溢出
解决办法有几种。
首先就是看程序里面是否死循环。这样的话会很耗内存的
第二就是你提到5W条数据导出,那么第二次导出的时候是新的5W条数据么?如果是新的话旧的是否还存在内存里面呢?
第三就是扩展JVM内存Run-->Arguments-->在VM arguments里面填 -Xmx800m试试
------解决方案--------------------

------解决方案--------------------
内存溢出!
5W多条数据。。。
这个问题的根源是jvm虚拟机的默认Heap大小是64M,可以通过设置其最大和最小值来实现.设置的方法主要是几个.
1.可以在windows 更改系统环境变量
加上JAVA_OPTS=-Xms64m -Xmx512m

2,如果用的tomcat,在windows下,可以在

C:\tomcat5.5.9\bin\catalina.bat  中加上:

set JAVA_OPTS=-Xms64m -Xmx256m

位置在: rem Guess CATALINA_HOME if not defined  这行的下面加合适.

3.如果是linux系统
Linux  在{tomcat_home}/bin/catalina.sh的前面,加 
set JAVA_OPTS='-Xms64 -Xmx512'



------解决方案--------------------
为啥不考虑下,是否存在资源未关闭的情况?

另外,如果用到Map等数据结构存储数据的话,在使用完了别指望着GC去回收垃圾,自己清空下比较好。