有时重开下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)

解决方案 »

  1.   

    在JVM中如果98%的时间是用于GC且可用的 Heap size 不足2%的时候将抛出此异常信息,可以用如下方法解决(根据你的实际情况设置大小),但是这只是临时的解决方法,更重要的是改造你的CODE1.可以在windows 更改系统环境变量加上JAVA_OPTS=-Xms64m -Xmx512m2,如果用的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'
      

  2.   

    java.lang.OutOfMemoryError: PermGen space 你不断的更新你的class,造成应用重启,最终造成代码区的内存空间满了。重开一下,当然就好了。呵呵!我这里也这样,你可以参考这个看看
    http://www.java2000.net/p5691增加代码区,不过只要你不断的更新,迟早会出现这个问题。
      

  3.   

    这个问题很正常,在解决这个问题之前,需要了解下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,这个值设置不宜过大,因为你这里设置大了,程序中使用的就会相应的减少。