Это из-за постоянной загрузки класса.
Java хранит байт-код класса и все константы (например, строковые константы) в постоянной куче, которая не является сборщиком мусора по умолчанию (что имеет смысл в большинстве ситуаций, поскольку классы загружаются только один раз за время существования приложения).
В приложениях, которые часто загружают классы в течение всего времени жизни:
- веб-серверы и серверы приложений во время горячего перераспределения;
- IDE при запуске разработанных приложений (каждый раз, когда вы нажимаете кнопку Run в Netbeans или затмеваете, она загружает классы вашего приложения по-новому);
- и т.д.
это поведение неуместно, потому что в итоге куча заполняется полностью.
Чтобы предотвратить эту ошибку, необходимо включить сборщик мусора с постоянной кучей.
Я использую опции
-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
для получения дополнительной информации).