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


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

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

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

5 27

5 ответов:

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

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

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

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

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

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

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

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

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

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

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

Смотрите эти сообщения в блоге для получения более подробной информации: утечки загрузчика классов и Как исправить страшный "Ява.яз..OutOfMemoryError: Пермгеновое пространство "

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

- Xmx512m-Xms512m-XX: MaxPermSize=512m

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

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