Вопрос

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

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

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

Это было полезно?

Решение

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

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

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

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

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

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

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

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

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

Другие советы

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

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

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

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

-Xmx512m -Xms512m -XX: Максимальный размер = 512 м

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top