天天看点

关于JDK1.6+MyEclipse6.5+Tomcat6.0启动SSH项目内存溢出解惑

前段时间拿到一个SSH项目,用Tomcat6(Myeclipse集成)启动一会儿就会抛出内存溢出错误,开发工作几乎无法进行,不停的启动内存溢出。在网上搜索多种方法仍然无效,无赖只能继续开发了几天,实在不甘心,这样总不是个办法吧。

现在总结一下:

网上常见的解决Tomcat内存溢出的方法:

1.修改tomcat启动文件,设置tomcat内存大小。

                2.MyEclipse集成tomcat中配置tomcat大小。

    我试图各种方法把内存设置到相对大的值,但是仍然会报内存溢出错误,通过内存监控发现java进程一度占用内存600多兆,到达这个值后不久就会抛出内存溢出错误。

    通过内存分析可以发现我设置的tomcat内存最大值远远大于600多兆,说明问题不出在tomcat内存设置上。

   那么详细分析一下,由于项目使用SSH框架,且项目文件达到300多兆,是一个庞大的项目,项目启动时会load大量的class,hibernate会缓存大量的数据。

  COPY: 

 说说为什么会内存益出:这一部分用于存放Class和Meta的信息,Class在被 Load的时候被放入PermGen space区域,它和和存放Instance的Heap区域不   同,GC(Garbage Collection)不会在主程序运行期对PermGen space进行清理,所以如果你的APP会LOAD很多CLASS的话,就很可能出现PermGen        space错误。

根本原因还是出在class加载上,我们知道Class加载是由Java虚拟机来完成的,所以设置虚拟机的内存大小才是关键,在MyEclipse中设置:从Intalled JREs里修改;window->Preferences->Java->Installed JREs,选择当前的JRE,然后edit它;在新窗口里设置Default VM Arguments为 -Xms128M -Xmx512M适当调整合适的内存大小即可。

继续阅读