Как я могу предотвратить ошибки пространства PermGen в Netbeans?
Каждые 15-30 минут Netbeans показывает "java.lang.OutOfMemoryError: PermGen space
". Из того, что я узнал из Google, это, как представляется, связано с утечками классов или утечками памяти в целом.
К сожалению, все предложения, которые я нашел, были связаны с серверами приложений, и я не собираюсь адаптировать их к Netbeans. (Я даже не уверен, что та же проблема)
Это проблема в моем приложении? Как найти источник?
Ответы
Ответ 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.