java.lang.OutOfMemoryError: Java heap space 异常 无法解决 有高手没
2013-4-1 11:45:05 org.apache.catalina.core.StandardWrapperValve invoke严重: Servlet.service() for servlet action threw exception
java.lang.OutOfMemoryError: Java heap space
at java.util.ArrayList.<init>(ArrayList.java:113)
at java.util.ArrayList.<init>(ArrayList.java:120)
at net.sf.jasperreports.engine.util.JRStyledText.<init>(JRStyledText.java:73)
at net.sf.jasperreports.engine.util.JRStyledTextParser.getStyledText(JRStyledTextParser.java:268)
at net.sf.jasperreports.engine.fill.JRTemplatePrintText.getFullStyledText(JRTemplatePrintText.java:212)
at net.sf.jasperreports.engine.export.JRXlsAbstractExporter.getStyledText(JRXlsAbstractExporter.java:675)
at net.sf.jasperreports.engine.export.JExcelApiExporter.exportText(JExcelApiExporter.java:444)
at net.sf.jasperreports.engine.export.JRXlsAbstractExporter.exportPage(JRXlsAbstractExporter.java:590)
at net.sf.jasperreports.engine.export.JRXlsAbstractExporter.exportReportToStream(JRXlsAbstractExporter.java:463)
at net.sf.jasperreports.engine.export.JRXlsAbstractExporter.exportReport(JRXlsAbstractExporter.java:186)
at util.XlsPrinter.doPrinter(XlsPrinter.java:100)
at com.qaqc2.action.RPT.MemberGatherAction.doPrintMemb(MemberGatherAction.java:75)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:274)
at org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:194)
at base.BaseAction.execute(BaseAction.java:137)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:419)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:96)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at util.EncodingFilter.doFilter(EncodingFilter.java:49)
试过向网上提的
如果你用win
/tomcat/bin/catalina.bat 加上下面的命令:
set JAVA_OPTS=-Xms32m -Xmx256m
如果你用unix/linux
/tomcat/bin/catalina.sh 加上下面的命令:
JAVA_OPTS="-Xms32m -Xmx256m"
更改内存 但是更改后还是报这个异常,网上说的基本都试了 --------------------编程问答-------------------- 从错误信息来看,是因为你使用的报表占用太多内存(不够或者没有释放),而导致堆内存溢出。
解决方案从两个方面着手,1、加大内存如-Xmx1024m;2、检查优化代码及时释放内存 --------------------编程问答--------------------
ArrayList 初始化内存溢出了,检查下程序 --------------------编程问答-------------------- 我以前也经常遇到这样的情况。。尤其遇到读上万条excel数据的时候。。
后来网上搜了搜,找到了两个比较合适的解决方法吧。。
1 查看内存:
workspace/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.prefs,在里面加上SHOW_MEMORY_MONITOR=true,重启eclipse,就可以在其左下角看到内存使用情况。
2 修改内存:
方法一:
找到eclipse/eclipse.ini,打开,在其上加上
-vmargs
-Xms128m
-Xmx512m
-XX:permSize=64M
-XX:MaxPermSize=128M
方法二:
打开eclipse,选择Window--Preferences--Java--Installed JREs,在右边选择前面有对勾的JRE,单击Edit,出现一个EditJRE的对话框,在其中的Default VM Arguments框中输入-Xms128m -Xmx512m。
这样设置java虚拟机内存使用最小是128M,最大是512M。
楼主可以试试。。挺好用的。 --------------------编程问答-------------------- 如果用了我那个方法之后还报错,那就是你程序本身有问题,导致实实在在的内存溢出 --------------------编程问答-------------------- 别一次开多个项目哦。一般开一个项目tomcat应该能启动了。开太多也会死 --------------------编程问答-------------------- 都遇到过这样的问题啊,之前我们也是加大内存,发现偶尔还是会出现这样的情况。
就要查看自己的代码了,发现是自己没有及时释放内存。
而且,你的错误代码也显示了在ArrayList这块,好好看下这块的程序是否有什么不合理的地方。 --------------------编程问答-------------------- 一般来说,如果加大内存还出现问题,那就是代码本身的问题了,先尝试处理少量数据的情况,再试试检查或优化下代码,我也遇到过代码逻辑错误导致的内存溢出。 --------------------编程问答--------------------
++
补充:Java , Web 开发