大侠们搭救一把啊! struts2框架前后台分两个工程,通过webservice交互。现在是执行一个简单的评论功能,评论成功后抛出内存溢出。是不是和webservice有关啊,
java.lang.OutOfMemoryError: PermGen space
at org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment.createParameterizedType(LookupEnvironment.java:747)
at org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment.getTypeFromTypeSignature(LookupEnvironment.java:1104)
at org.eclipse.jdt.internal.compiler.lookup.BinaryTypeBinding.createMethod(BinaryTypeBinding.java:476)
at org.eclipse.jdt.internal.compiler.lookup.BinaryTypeBinding.createMethods(BinaryTypeBinding.java:566)
at org.eclipse.jdt.internal.compiler.lookup.BinaryTypeBinding.cachePartsFrom(BinaryTypeBinding.java:325)
at org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment.createBinaryTypeFrom(LookupEnvironment.java:600)
at org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment.createBinaryTypeFrom(LookupEnvironment.java:579)
at org.eclipse.jdt.internal.compiler.Compiler.accept(Compiler.java:272)
at org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment.askForType(LookupEnvironment.java:103)
at org.eclipse.jdt.internal.compiler.lookup.UnresolvedReferenceBinding.resolve(UnresolvedReferenceBinding.java:43)
at org.eclipse.jdt.internal.compiler.lookup.BinaryTypeBinding.resolveUnresolvedType(BinaryTypeBinding.java:138)
at org.eclipse.jdt.internal.compiler.lookup.BinaryTypeBinding.superclass(BinaryTypeBinding.java:936)
at org.eclipse.jdt.internal.compiler.lookup.ClassScope.detectHierarchyCycle(ClassScope.java:1045)
at org.eclipse.jdt.internal.compiler.lookup.ClassScope.detectHierarchyCycle(ClassScope.java:1055)
at org.eclipse.jdt.internal.compiler.lookup.ClassScope.detectHierarchyCycle(ClassScope.java:1055)
at org.eclipse.jdt.internal.compiler.lookup.ClassScope.detectHierarchyCycle(ClassScope.java:1006)
at org.eclipse.jdt.internal.compiler.ast.QualifiedTypeReference.getTypeBinding(QualifiedTypeReference.java:86)
at org.eclipse.jdt.internal.compiler.ast.TypeReference.resolveType(TypeReference.java:154)
at org.eclipse.jdt.internal.compiler.ast.TypeReference.resolveSuperType(TypeReference.java:110)
at org.eclipse.jdt.internal.compiler.lookup.ClassScope.findSupertype(ClassScope.java:1111)
at org.eclipse.jdt.internal.compiler.lookup.ClassScope.connectSuperclass(ClassScope.java:824)
at org.eclipse.jdt.internal.compiler.lookup.ClassScope.connectTypeHierarchy(ClassScope.java:949)
at org.eclipse.jdt.internal.compiler.lookup.CompilationUnitScope.connectTypeHierarchy(CompilationUnitScope.java:289)
at org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment.completeTypeBindings(LookupEnvironment.java:219)
at org.eclipse.jdt.internal.compiler.Compiler.beginToCompile(Compiler.java:383)
at org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:397)
at org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:413)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:308)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:286)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:273)
at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:566)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:317)

解决方案 »

  1.   

    我用debug跟踪过了,代码一切正常!
      

  2.   

     PermGen space 
    静态区内存溢出
      

  3.   

    我知道, 遇见过这样的问题
     你可以把tomcat重启了, 假如是别的容器, 同理重启即可.
      这个事JVM的内存错误, 是jdk的一个bug, 待修复中........
      

  4.   

    哪岂不是没有办法了,重启tomcat是不可行的!
      

  5.   

    删掉项目中不要的包
    保证tomcat只部署这个项目试下
    不行就得加大配置JVM的内存啦
      

  6.   

    先加大tomcat的内存设置,如果不ok,再把spring,Hibernate之类的jar包放到tomcat的lib下有效果,
    如果你使用了上述内容。
      

  7.   

    加大tomcat的内存治标不治本,不过我估计可能是你的代码里有漏洞,只是你自己没有发现而已(可能很小很小,一时很难发现)!
      

  8.   

    不是代码出问题了,是热加载的次数太多了。PermGen space 是一个存放类信息的内存区域,如果时常进行热加载的话就会导致这块区域用尽。解决方法:1:停止服务器,重启即可;2:增大 PermGen 区,在 java 命令中增加 -XX:MaxPermSize=128m 或者更大(默认为 64m),这个参数是 Sun 的 JVM HotSpot 参数,其他 JVM 不一定存在该参数,使用时需要注意,参考:
    http://java.sun.com/javase/technologies/hotspot/vmoptions.jsp如果你用 tomcat 的话,需要修改 catalina.bat 文件,文件开头部分在 rem 注释语句的后面一行加上:
    set JAVA_OPTS=%JAVA_OPTS% -XX:MaxPermSize=128m如果是 Linux 的话,修改 catalina.sh 文件,文件开头部分在 # 注释后加上:
    JAVA_OPTS="$JAVA_OPTS -XX:PermSize=128m"
      

  9.   

    上面回复中最后一行:JAVA_OPTS="$JAVA_OPTS -XX:PermSize=128m" 改为:JAVA_OPTS="$JAVA_OPTS -XX:MaxPermSize=128m"
      

  10.   

    JVM参数设置问题,不给马儿吃饱,又想马儿跑,咋可能的事情。
      

  11.   


    通常用内存溢出抛出的是:java.lang.OutOfMemoryError: Java heap space
    而 PermGen 区溢出抛出的是:java.lang.OutOfMemoryError: PermGen space如果明白 PermGen 和 Java heap 主要作用是什么就知道这两者有什么区别了。
      

  12.   

    如果是反复热加载几次导致的问题的话,就是(●)火龙果(●)说的那样。
    也可以看看这个
    http://www.blogjava.net/ynstudio/archive/2008/04/11/192296.html
      

  13.   

    你的进程的空间安排的太少了,调一下Eclipse的内存吧