混合使用Groovy和Java代码在Jetty上运行,而不会;“永久空间”;错误

混合使用Groovy和Java代码在Jetty上运行,而不会;“永久空间”;错误,java,maven,web,groovy,jetty,Java,Maven,Web,Groovy,Jetty,在我正在进行的这个基于web的Maven项目中,我试图在现有Java代码的基础上使用一些Groovy代码。到目前为止,每当我尝试从java调用Groovy创建的对象时,我都会得到史诗般的“java.lang.OutOfMemoryError:PermGen space”。web项目运行在Jetty上,使用Jetty Maven插件 我已将烫发大小增加到以下大小:- export MAVEN_OPTS="-Xms2048m -Xmx2048m -XX:PermSize=512m -XX:MaxPe

在我正在进行的这个基于web的Maven项目中,我试图在现有Java代码的基础上使用一些Groovy代码。到目前为止,每当我尝试从java调用Groovy创建的对象时,我都会得到史诗般的“java.lang.OutOfMemoryError:PermGen space”。web项目运行在Jetty上,使用Jetty Maven插件

我已将烫发大小增加到以下大小:-

export MAVEN_OPTS="-Xms2048m -Xmx2048m -XX:PermSize=512m -XX:MaxPermSize=1024m"
在使用GMaven 1.5或Groovy eclipse编译器2.8.0-01时,我发现了同样的问题

例如,在这个Spring MVC控制器中,我使用了
Stuff
对象,它是一个简单的POGO。顺便说一句,这是我整个JavaEE项目中使用的唯一一个Groovy代码

@Controller
@RequestMapping(value = "/")
public class HomeController {

    @RequestMapping(method = RequestMethod.GET)
    public String main() {
        Stuff stuff = new Stuff();
        stuff.setName("Bla");
        System.out.println(stuff.getName());
        return "home";
    }
}
当我从网络上点击控制器时,我得到以下信息:-

java.lang.OutOfMemoryError: PermGen space
    at java.lang.ClassLoader.findBootstrapClass(Native Method)
    at java.lang.ClassLoader.findBootstrapClassOrNull(ClassLoader.java:926)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:297)
    at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass(ClassRealm.java:239)
    at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass(ClassRealm.java:230)
    at org.eclipse.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:407)
    at org.eclipse.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:383)
    at java.lang.Class.getDeclaredMethods0(Native Method)
    at java.lang.Class.privateGetDeclaredMethods(Class.java:2475)
    at java.lang.Class.getDeclaredMethods(Class.java:1818)
    at org.codehaus.groovy.reflection.CachedClass$3$1.run(CachedClass.java:84)
    at java.security.AccessController.doPrivileged(Native Method)
    at org.codehaus.groovy.reflection.CachedClass$3.initValue(CachedClass.java:81)
    at org.codehaus.groovy.reflection.CachedClass$3.initValue(CachedClass.java:79)
    at org.codehaus.groovy.util.LazyReference.getLocked(LazyReference.java:46)
    at org.codehaus.groovy.util.LazyReference.get(LazyReference.java:33)
    at org.codehaus.groovy.reflection.CachedClass.getMethods(CachedClass.java:250)
    at org.codehaus.groovy.runtime.m12n.SimpleExtensionModule.createMetaMethods(SimpleExtensionModule.java:111)
    at org.codehaus.groovy.runtime.m12n.SimpleExtensionModule.getMetaMethods(SimpleExtensionModule.java:93)
    at org.codehaus.groovy.runtime.metaclass.MetaClassRegistryImpl.registerExtensionModuleFromProperties(MetaClassRegistryImpl.java:192)
    at org.codehaus.groovy.runtime.metaclass.MetaClassRegistryImpl.registerExtensionModuleFromMetaInf(MetaClassRegistryImpl.java:174)
    at org.codehaus.groovy.runtime.metaclass.MetaClassRegistryImpl.registerClasspathModules(MetaClassRegistryImpl.java:156)
    at org.codehaus.groovy.runtime.metaclass.MetaClassRegistryImpl.<init>(MetaClassRegistryImpl.java:111)
    at org.codehaus.groovy.runtime.metaclass.MetaClassRegistryImpl.<init>(MetaClassRegistryImpl.java:73)
    at groovy.lang.GroovySystem.<clinit>(GroovySystem.java:33)
    at org.codehaus.groovy.reflection.ClassInfo.getMetaClassUnderLock(ClassInfo.java:162)
    at org.codehaus.groovy.reflection.ClassInfo.getMetaClass(ClassInfo.java:192)
    at myproject.bean.Stuff.$getStaticMetaClass(Stuff.groovy)
    at myproject.bean.Stuff.<init>(Stuff.groovy)
    at myproject.controller.HomeController.main(HomeController.java:14)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

如何解决此问题?谢谢。

-XX:MaxPermSize=1024m
太多了。这听起来像是类加载器中的内存泄漏。我建议启动您的分析器并分析活动的类加载器。其中一个应该加载很多类

如果您仍然使用Java5,请尝试Java7。如果您真的想继续使用5,请确保在Java启动选项中添加
-XX:+cmsgensweapingenabled

相关的:


你好@Aaron,我也尝试了256m和512m的
MaxPermSize
,但我仍然看到相同的错误。我目前正在使用Java6,这是我唯一可以用来模拟我们的生产环境的版本。IntelliJ似乎并不尊重MAVEN_的选择。当我从终端运行
mvn clean jetty:run
时,它工作正常,但从IntelliJ运行jetty时,我看到了相同的错误。修复方法是在IntelliJ的Maven Runner的VM选项中设置
MaxPermSize
@Controller
@RequestMapping(value = "/")
public class HomeController {

    @RequestMapping(method = RequestMethod.GET)
    public String main() {
        //Stuff stuff = new Stuff();
        //stuff.setName("Bla");
        //System.out.println(stuff.getName());
        return "home";
    }
}