java.lang.OutOfMemoryError: пространство PermGen в коте с затмением - PullRequest
45 голосов
/ 05 июля 2010

Я часто получаю это исключение при запуске моего приложения на tomcat с использованием eclipse:

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)

Ответы [ 3 ]

97 голосов
/ 05 июля 2010

попытаться поднять пространство для перми, добавить следующие параметры для запуска vm

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

также добавить -XX: MaxPermSize= 256m для Tomcat в Eclipse: Server > Open Launch Configuration > Arguments

Обновление (в 2014 году): посмотрите здесь на этот вопрос и ответьте о новое Java 8 Metaspace.

и посмотрите здесь:

Как бороться с ошибкой “java.lang.OutOfMemoryError: PermGen space”

21 голосов
/ 07 декабря 2011

Вы можете настроить эти аргументы для eclipse:

"Чтобы решить эту проблему, я остановил сервер в Eclipse. Дважды щелкнул по серверу на вкладке Servers , чтобы открыть страницу обзораНажмите кнопку Открыть конфигурацию запуска , а затем на вкладке Аргументы .

Я добавил следующие аргументы виртуальной машины:

-XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled

ref дляhttp://malcolmmallia.com/malcblog/?p=60

5 голосов
/ 19 июля 2010

У меня сегодня тоже есть эта проблема. Это случилось совершенно неожиданно. Вчера я обновил JDK / JRE с 1.6.0_13 до 1.6.0_21, чтобы исправить проблему, связанную с Glassfish 3.0.1, и Eclipse неожиданно сломался с этими OutOfMemoryError: PermGen space ошибками. После (неправильного) разгона плагина Glassfish и заключения о том, что проблема не была устранена после очистки метаданных рабочего пространства, выясняется, что это вызвано изменением строки поставщика JVM с «Sun» на «Oracle» с 1.6.0_20 , Eclipse не распознает нового поставщика JVM и поэтому не применяет аргументы виртуальной машины, как указано в eclipse.ini.

Это было сообщено как проблема Eclipse 319514 , и мальчики Eclipse быстро выпустили патч . Пока они не исправят это навсегда, обходной путь действительно должен добавить следующие строки к eclipse.ini:

-XX:MaxPermSize=256m

Итак, если вы недавно делали обновление JVM, возможно, стоит взглянуть на него.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...