最近做个ssh的老是提示java.lang.OutOfMemoryError: PermGen space

jan222 2009-01-02 12:52:08
有时重开下tomcat又没问题,不知怎么回事

javax.servlet.ServletException: Filter execution threw an exception
org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:96)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)


root cause

java.lang.OutOfMemoryError: PermGen space
java.lang.ClassLoader.defineClass1(Native Method)
java.lang.ClassLoader.defineClass(ClassLoader.java:620)
java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:1876)
org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:889)
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1353)
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1232)
java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.lookupSessionFactory(OpenSessionInViewFilter.java:216)
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.lookupSessionFactory(OpenSessionInViewFilter.java:202)
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:146)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:96)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)

...全文
657 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
miaoliujun 2009-01-02
  • 打赏
  • 举报
回复
这个问题很正常,在解决这个问题之前,需要了解下JVM中的内存是怎么分配的,有哪几部分。

楼主你用google查找一下应该也能找到解决方案,我这里找到一个解释,你可以参考下

PermGen space的全称是Permanent Generation space,是指内存的永久保存区域OutOfMemoryError: PermGen space从表面上看就是内存益出,解决方法也一定是加大内存。说说为什么会内存益出:这一部分用于存放Class和Meta的信息,Class在被 Load的时候被放入PermGen space区域,它和和存放Instance的Heap区域不同,GC(Garbage Collection)不会在主程序运行期对PermGen space进行清理,所以如果你的APP会LOAD很多CLASS的话,就很可能出现PermGen space错误。

解决方法是你在启动的时候增加-XX:MaxPermSize这样一个参数,比如-XX:MaxPermSize=256m,这个是将PermGen space最大设置为256M,这个值设置不宜过大,因为你这里设置大了,程序中使用的就会相应的减少。
老紫竹 2009-01-02
  • 打赏
  • 举报
回复
java.lang.OutOfMemoryError: PermGen space
你不断的更新你的class,造成应用重启,最终造成代码区的内存空间满了。
重开一下,当然就好了。呵呵!
我这里也这样,你可以参考这个看看
http://www.java2000.net/p5691
增加代码区,不过只要你不断的更新,迟早会出现这个问题。
jinhuiyu 2009-01-02
  • 打赏
  • 举报
回复
在JVM中如果98%的时间是用于GC且可用的 Heap size 不足2%的时候将抛出此异常信息,可以用如下方法解决(根据你的实际情况设置大小),但是这只是临时的解决方法,更重要的是改造你的CODE

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'
jan222 2009-01-02
  • 打赏
  • 举报
回复
谢谢各位大侠,我试下
guolimin1118 2009-01-02
  • 打赏
  • 举报
回复
我也遇到过这个问题
很烦人的
帮顶

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧