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 = 256m : Server > 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
我今天也遇到了这个问题。 它完全是出于蓝色。 昨天我已经将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更新,那么看看它可能是值得的。