Как я могу предотвратить ошибки PermGen space в Netbeans?
-
21-08-2019 - |
Вопрос
Каждые 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.