Как я могу предотвратить ошибки пространства PermGen в Netbeans? - PullRequest
27 голосов
/ 23 марта 2009

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

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

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

Ответы [ 5 ]

32 голосов
/ 23 марта 2009

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

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

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

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

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

Я использую опции

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

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

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

4 голосов
/ 23 марта 2009

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

2 голосов
/ 06 декабря 2011

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

-Xmx512m -Xms512m -XX: MaxPermSize = 512 м

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

2 голосов
/ 23 марта 2009

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

См. Эти сообщения в блоге для более подробной информации: Утечки в Classloader и Как исправить ужасную ошибку "java.lang.OutOfMemoryError: PermGen space"

1 голос
/ 23 марта 2009

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

...