Я запускаю Tomcat6 в Sun JRE6, и после каждой пары развертываний я получаю OutOfMemoryException: PermGen. Я погуглил по решениям PermGen и попробовал много исправлений. Ни одной работы. Я читал много хороших отзывов о Oracle JRockit и о том, как его PermGen-распределение может иметь размер гига (по сравнению с Sun 128M), и, хотя это не решает проблему, это позволило бы мне выполнить повторное развертывание 100 раз между исключениями PermGen по сравнению с 2 раз сейчас.
Проблема с JRockit заключается в том, что для использования его в производстве вам необходимо купить WebLogic, который стоит тысячи долларов. Какие существуют другие (бесплатные) варианты, более щадящие расширение PermGen? Как следующие JVM работают в этой области?
- IBM JVM
- Откройте JDK
- Blackdown
- Каффе
... другие?
Обновление: Некоторые люди спрашивают, почему я думал, что PermGen max составляет 128M. Причина в том, что каждый раз, когда я пытаюсь поднять его выше 128M, моя JVM не может инициализироваться:
[2009-06-18 01:39:44] [info] Error occurred during initialization of VM
[2009-06-18 01:39:44] [info] Could not reserve enough space for object heap
[2009-06-18 01:39:44] [395 javajni.c] [error] CreateJavaVM Failed
Странно, что он не пытается зарезервировать место для объекта куча, хотя я не уверен, что это «куча», а не «куча».
Я загружаю JVM с начальной загрузкой 1024 МБ и максимальной кучей 1536 МБ.
Я закрою этот вопрос, так как на него был дан ответ, т.е. "переключение бесполезно" и вместо этого спросите Почему моя Sun JVM не работает с большими настройками PermGen?