Подтвердить что ты не робот

Как я могу предотвратить ошибки пространства PermGen в Netbeans?

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

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

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

4b9b3361

Ответ 1

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

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

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

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

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

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

-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 для получения дополнительной информации).

Ответ 2

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

Ответ 3

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

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

Ответ 4

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

-Xmx512m -Xms512m -XX: MaxPermSize = 512 м

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

Ответ 5

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