java.lang.OutOfMemoryError:在eclipse中tomcat中的PermGen空间

我使用eclipse在tomcat上运行我的应用程序时经常遇到这个exception:

java.lang.OutOfMemoryError: PermGen space at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClassCond(ClassLoader.java:632) at java.lang.ClassLoader.defineClass(ClassLoader.java:616) at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141) at org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:1850) at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:890) at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1354) at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1233) at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClassCond(ClassLoader.java:632) at java.lang.ClassLoader.defineClass(ClassLoader.java:616) at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141) at org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:1850) at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:890) at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1354) at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1233) at org.hibernate.hql.ast.QueryTranslatorImpl.parse(QueryTranslatorImpl.java:265) at org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:180) at org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:134) at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:101) at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:80) at org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:94) at org.hibernate.impl.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:156) at org.hibernate.impl.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:135) at org.hibernate.impl.SessionImpl.createQuery(SessionImpl.java:1650) at com.spacerdv.dao.impl.UserDaoImpl.getUserDetails(UserDaoImpl.java:170) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:307) at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183) 

尝试提高perm空间,为vm启动添加以下参数

-XX:PermSize = 256m -XX:MaxPermSize = 256m

在Eclipse中为Tomcat添加-XX:MaxPermSize = 256mServer > Open Launch Configuration > Arguments

更新(2014年):看看这个问题,并回答有关新的Java 8 Metaspace。

看看这里:

如何处理“java.lang.OutOfMemoryError:PermGen space”错误

你可以为eclipseconfiguration这些参数:

“为了解决这个问题,我在Eclipse中停止了服务器,双击服务器选项卡中的服务器 ,打开服务器的Overview页面,点击Open Launch Configuration ,然后在Arguments选项卡上。

我添加了以下VM参数:

 -XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled 

请参阅http://malcolmmallia.com/malcblog/?p=60

我今天也遇到了这个问题。 它完全是出于蓝色。 昨天我已经将JDK / JRE从1.6.0_13更新到1.6.0_21来解决GlassFish 3.0.1的特定问题,Eclipse突然打破了那些OutOfMemoryError: PermGen space错误。 在Glassfish插件上(不正确地)咆哮之后,得出的结论是在清理工作区元数据之后问题没有得到解决,事实certificate这是由于JVM供应商string从“Sun”到“Oracle”自1.6.0_20 。 Eclipse没有识别新的JVM供应商,因此没有应用eclipse.ini指定的VM参数。

这被报告为Eclipse问题319514 ,Eclipse的男孩们很快就发布了一个补丁 。 直到他们得到它更永久的修复,解决方法是确实添加以下行到eclipse.ini

 -XX:MaxPermSize参数=256米

所以,如果你最近做了一个JVM更新,那么看看它可能是值得的。