2009-03-23 2 views
27

Каждые 15-30 минут Netbeans показывает «java.lang.OutOfMemoryError: PermGen space». Из того, что я узнал из Google, похоже, это связано с утечками укладчиков или утечками памяти в целом.Как предотвратить ошибки пространства PermGen в Netbeans?

К сожалению, все предложения, которые я нашел, были связаны с серверами приложений, и я не собираюсь их адаптировать к Netbeans. (Я даже не уверен, что это та самая проблема)

Является ли это проблемой в моем приложении? Как найти источник?

+0

см. Также http://stackoverflow.com/questions/717550/java-lang-outofmemoryerror-java-heap-space-with-netbeans – Steen

+0

Почему бы вам не перейти на более новую версию NetBeans? 6.5 действительно старый. –

+4

@a_horse_with_no_name: Как и этот вопрос. Я спросил его более трех лет назад. –

ответ

32

Это из-за постоянной загрузки класса.

Java хранит байтовый код класса и все константы (например, строковые константы) в постоянной куче, которая не является сборкой мусора по умолчанию (что имеет смысл в большинстве ситуаций, потому что классы загружаются только один раз в течение всего срока службы приложения).

В приложениях, которые часто загружают классы в течение всей жизни, которые являются:

  • веб-серверов и серверов приложений во время горячего перевода;
  • IDE при запуске разработанных приложений (каждый раз, когда вы нажимаете кнопку «Пуск» в Netbeans или затмеваете, он загружает классы вашего приложения на новый);
  • и т. Д. это поведение не подходит, потому что куча заполняется в конечном итоге.

Чтобы предотвратить эту ошибку, вам необходимо включить постоянную сборку мусора.

Я использую варианты

-XX:MaxPermSize=256M 
-XX:+CMSClassUnloadingEnabled 
-XX:+CMSPermGenSweepingEnabled 

(останавливали мое затмение 3.4 из метания "java.lang.OutOfMemoryError: PermGen space" поэтому он должен также работать с NetBeans).

Редактировать: Сразу отметим, что для Netbeans установить эти параметры в: [Netbeans installation]\etc\netbeans.conf Вы должны prefixe эти варианты с -J и добавить их в netbeans_default_options (см комментарии в netbeans.conf для получения дополнительной информации).

+0

ОК, ни один из ответов действительно не помог, но этот купил мне больше всего времени между перезагрузками :) –

+0

попробуйте icrease MaxPermSize до 512M или более beacuse сбор мусора perpment hep все равно не поможет, если приложение свяжется, чтобы хранить там больше, чем это может содержать (количество живых объектов permamanet превышает объем памяти кучи) –

+1

Аргументы, казалось, сработали для меня (байт-анализ кода rt.jar в моем случае), однако я получил предупреждение 'Пожалуйста, используйте CMSClassUnloadingEnabled вместо CMSPermGenSweepingEnabled в будущем ". Тем не менее работал. – Grundlefleck

2

См. Это link о том, как установить размер PermSize. Скорее всего, это не проблема вашего кода, поэтому единственным решением было бы увеличить PermSize. Я обнаружил, что это довольно часто, когда вы работаете с JAXB. В общем случае, если вы используете много библиотек, которые сами также зависят от многих других файлов jar, размер по умолчанию для пространства PermGen может быть недостаточно большим.

Посмотреть эти сообщения пользователя для более подробной информации: Classloader leaks и How to fix the dreaded "java.lang.OutOfMemoryError: PermGen space"

1

Вы можете изменить параметры запуска из Netbeans JVM путем редактирования файла /etc/netbeans.conf. У меня часто возникают такие ошибки при разработке Webapp, и я часто его развертываю. В этом случае я периодически запускаю tomcat.

4

Попробуйте добавить следующий аргумент Netbeans NETCONF: -J-XX: MaxPermSize = 256m

2

Если вы разрабатываете веб-приложение, попробуйте поставить на сервере вариант Vm

-Xmx512m -Xms512m -XX: MaxPermSize = 512m

Перейти к Инструменты/Серверы // Платформа/Параметры VM (Netbeans 7.4)

Смежные вопросы