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