关于java.lang.OutOfMemoryError:java heap space错误解决方案

//首先检查程序有没
<wbr>有限入死循环<br><br>   这个问题主要还是由这<wbr>个问题java.lang.<wbr>OutOfMemor<wbr>yError:Javaheapspace引起的。第一次出现这<wbr>样的的问题以后,引发<wbr>了其他的问题。在网上<wbr>一查可能是JAVA的<wbr>堆栈设置太小的原因。<wbr><br><br>   跟据网上的答案大致有<wbr>这两种解决方法:<br><br>   1、设置环境变量<br><br>   解决方法:手动设置H<wbr>eapsize<br><br>   修改TOMCAT_H<wbr>OME/bin/ca<wbr>talina.sh<br><br>   setJAVA_OPTS=<wbr>-Xms32m-Xmx512m<br><br>   可以根据自己机器的内<wbr>存进行更改。<br><br>   2、java-Xms32m-Xmx800mclassName<br><br>   就是在执行JAVA类<wbr>文件时加上这个参数,<wbr>其中classNam<wbr>e是需要执行的确类名<wbr>。(包括包名)<br><br>   这个解决问题了。而且<wbr>执行的速度比没有设置<wbr>的时候快很多。<br><br>   如果在测试的时候可能<wbr>会用Eclispe这时候就需要在Ecl<wbr>ipse-&gt;run-arguments<wbr>中的VMarguments中输入-Xms32m<wbr>-Xmx800m这个<wbr>参数就可以了。<br><br>   后来在Eclilps<wbr>e中修改了启动参数,<wbr>在VMarguments加入了-Xms32m<wbr>-Xmx800m,问<wbr>题解决。<br><br>   一、java.lan<wbr>g.OutOfMem<wbr>oryError:PermGenspace<br><br>   PermGenspace的全称是P<wbr>ermanentGeneration<wbr>space,是指内存<wbr>的永久保存区域,<br><br>   这块内存主要是被JV<wbr>M存放Class和M<wbr>eta信息的,Cla<wbr>ss在被Loader<wbr>时就会被放到Perm<wbr>Genspace中,<br><br>   它和存放类实例(In<wbr>stance)的He<wbr>ap区域不同,GC(<wbr>GarbageCollection<wbr>)不会在主程序运行期<wbr>对<br><br>   PermGenspace进行清理,<wbr>所以如果你的应用中有<wbr>很多CLASS的话,<wbr>就很可能出现Perm<wbr>Genspace错误,<br><br>   这种错误常见在web<wbr>服务器对JSP进行p<wbr>recompile的时候<wbr>。如果你的WEBAPP下都用了大量的<wbr>第三方jar,其大小<br><br>   超过了jvm默认的大<wbr>小(4M)那么就会产<wbr>生此错误信息了。<br><br>   解决方法:手动设置MaxPer<wbr>mSize大小<br><br>   修改TOMCAT_H<wbr>OME/bin/ca<wbr>talina.sh<br><br>   在“echo"UsingCATALINA_B<wbr>ASE:$CATALINA_<wbr>BASE"”上面加入<wbr>以下行:<br><br>   JAVA_OPTS=<wbr>"-server-XX:PermSi<wbr>ze=64M-XX:MaxPer<wbr>mSize=128m<wbr><br><br>   建议:将相同的第三方<wbr>jar文件移置到to<wbr>mcat/share<wbr>d/lib目录下,这<wbr>样可以达到减少jar<wbr>文档重复占用内存的目<wbr>的。<br><br>   二、java.lan<wbr>g.OutOfMem<wbr>oryError:Javaheapspace<br><br>   Heapsize设置<br><br>   JVM堆的设置是指j<wbr>ava程序运行过程中<wbr>JVM可以调配使用的<wbr>内存空间的设置.JV<wbr>M在启动的时候会自动<wbr>设置Heapsize的值,<br><br>   其初始空间(即-Xm<wbr>s)是物理内存的1/<wbr>64,最大空间(-X<wbr>mx)是物理内存的1<wbr>/4。可以利用JVM<wbr>提供的-Xmn-Xms-Xmx等选项可<br><br>   进行设置。Heapsize的大小是YoungGeneration<wbr>和TenuredGeneraion之和。<br><br>   提示:在JVM中如果<wbr>98%的时间是用于G<wbr>C且可用的Heapsize不足2%的时候将抛出<wbr>此异常信息。<br><br>   提示:HeapSize最大不要超过可用物理<wbr>内存的80%,一般的<wbr>要将-Xms和-Xm<wbr>x选项设置为相同,而<wbr>-Xmn为1/4的-<wbr>Xmx值。<br><br>   解决方法:手动设置H<wbr>eapsize<br><br>   修改TOMCAT_H<wbr>OME/bin/ca<wbr>talina.sh<br><br>   在“echo"UsingCATALINA_B<wbr>ASE:$CATALINA_<wbr>BASE"”上面加入<wbr>以下行:<br><br>   JAVA_OPTS=<wbr>"-server-Xms800m-Xmx800m-XX:MaxNew<wbr>Size=256m"<wbr><br><br>   三、实例,以下给出1<wbr>G内存环境下java<wbr>jvm的参数设置参考:<br><br>   JAVA_OPTS=<wbr>"-server-Xms800m-Xmx800m-XX:PermSi<wbr>ze=64M-XX:MaxNew<wbr>Size=256m-XX:MaxPer<wbr>mSize=128m<wbr>-Djava.awt<wbr>.headless=<wbr>true"<br><br>   很大的web工程,用<wbr>tomcat默认分配<wbr>的内存空间无法启动,<wbr>如果不是在myecl<wbr>ipse中启动tom<wbr>cat可以对tomc<wbr>at这样设置:<br><br>   TOMCAT_HOM<wbr>E\bin\cata<wbr>lina.bat中添加这样一句话:<br><br>   setJAVA_OPTS=<wbr>-Xmx1024M-Xms512M-XX:MaxPer<wbr>mSize=256m<wbr><br><br>   如果要在myecli<wbr>pse中启动,上述的<wbr>修改就不起作用了,可<wbr>如下设置:<br><br>   Myeclipse-<wbr>&gt;preferenc<wbr>es-&gt;myecli<wbr>pse-&gt;serve<wbr>rs-&gt;tomcat<wbr>-&gt;tomcat×.×-&gt;JD<wbr>K面板中的<br><br>   OptionalJavaVMarguments中<wbr>添加:-Xmx102<wbr>4M-Xms512M-XX:MaxPer<wbr>mSize=256m<wbr><a target="_blank" href="http://www.ihaohuo.com/2010-12-18/3/25/hailiuyanzuizhengpin/index.html">海柳烟嘴正品</a><br><br>   在myeclipse<wbr>中启动Tomcat时<wbr>,提示"ava.la<wbr>ng.OutOfMe<wbr>moryError:<wbr>Javaheapspace",解决办<wbr>法就是:<br><br>   Myeclipse-<wbr>&gt;preferenc<wbr>es-&gt;myecli<wbr>pse-&gt;serve<wbr>rs-&gt;tomcat<wbr>-&gt;tomcat×.×-&gt;JD<wbr>K面板中的<br><br>   OptionalJavaVMarguments中<wbr>添加:-Xmx102<wbr>4M-Xms512M-XX:MaxPer<wbr>mSize=256m<wbr><br><br>   //以上是转载<br><br>   我遇到的错误是在my<wbr>eclipse中启动<wbr>Tomcat时,提示<wbr>"ava.lang.<wbr>OutOfMemor<wbr>yError:Javaheapspace"<br><br>   以上三点我都试过了就是不知道自己的代码<wbr>从哪里进入死循环我运用的是strut<wbr>s,hibernat<wbr>e,spring<br><br>   根据错误提示JSON<wbr>Write找到自己项目下poj<wbr>o下hibernat<wbr>e的映射文件<br><br>   eg:<br><br>   有两张关联的表生成两个相联的实体类<wbr>和映射文件PersonInfo<wbr>mation和Sta<wbr>teOffice<br><br>   因为映射文件和实体类<wbr>是从数据库表自动生成<wbr>的所以都是自动生成双向<wbr>的关系<br><br>   在PersonInf<wbr>omation中pr<wbr>ivatePersStateO<wbr>fficepersStateO<wbr>ffice;<br><br>   并且在StateOf<wbr>fice中priva<wbr>teSet&lt;PersPe<wbr>rsonInform<wbr>ation&gt;persPerson<wbr>Informatio<wbr>ns=newHashSet&lt;Pe<wbr>rsPersonIn<wbr>formation&gt;<wbr>(<br><br>   0);<br><br>   所以在封装json数<wbr>据的时候就会出现死循<wbr>环现象不断的从两个实体类中<wbr>封装导致内存溢出<br><br>   解决方案1取消StateOff<wbr>ice中的关联2手动封装json数<wbr>据(为了不让查询数据<wbr>出现错误与冲突我选择手动封装jso<wbr>n数据)<br><br>   eg://获取任职类<wbr>型<br><br>   publicStringloadOffice<wbr>Type()throwsException{<br><br>   PrintWrite<wbr>rout=response.g<wbr>etWriter()<wbr>;<br><br>   typeOffice<wbr>List=offic<wbr>eTypeServi<wbr>ce.getOffi<wbr>ceType();<br><br>   out.print(<wbr>"{typeOffi<wbr>ceList:[")<wbr>;<br><br>   for(inti=0;i&lt;type<wbr>OfficeList<wbr>.size();i+<wbr>+){<br><br>   out.print(<wbr>"{typeOffi<wbr>ceId:'"+ty<wbr>peOfficeLi<wbr>st.get(i).<wbr>getTypeOff<wbr>iceId()+"'<wbr>,");<br><br>   out.print(<wbr>"typeOffic<wbr>e:'"+typeO<wbr>fficeList.<wbr>get(i).get<wbr>TypeOffice<wbr>()+"'}");<br><br>   if(i!=type<wbr>OfficeList<wbr>.size()-1)<wbr>{<br><br>   out.print(<wbr>",");<br><br>   }<br><br>   }<br><br>   out.print(<wbr>"]}");<br><br>   returnnull;<br><br>   } <br></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值