Как делает Java permgen, касаются размера кода

Мы не нашли использование для них. Поскольку мы выводим из эксплуатации старые серверы Compaq, наша собственная запчасть накапливают сборки, таким образом, у нас нет потребности пойти, ища замены. Рынок, вероятно, очень минимален для них.

1
задан 10 March 2010 в 17:36
2 ответа

Ваш Tomcat настроен для автоматического повторного развертывания приложений, которые отбрасываются в папке приложения? Вы используете ту функциональность?

При использовании той функциональности существует возможность, что объем памяти, используемый в пространстве PermGen, собирается увеличиваться. Это может произойти из-за (плохо записанный) приложения, которые в некотором роде сохраняют ссылки на загруженные классы живыми. Каждый раз существует повторно развертывание, объем памяти, используемый в пространстве PermGen, собирается увеличиваться, пока это не переполняется.

Если бы Вы не используете ту функциональность и всегда имеете то же приложение, работающее на сервере Tomcat, то я просто попробовал бы рабочий Tomcat настройками по умолчанию для пространства PermGen. Если загрузки приложения, и хорошо работают некоторое время, то это должно быть прекрасным. Если выполнение приложения из пространства PermGen, то просто увеличивают его на шагах до пространства PermGen, является достаточно большим.

Почему это было настроено к 256 м (как замечено в Вашем другом вопросе) во-первых?

Btw, да, существует корреляция между суммой загруженных классов и суммой необходимого пространства в области PermGen. Так, да, чем больше кода, который загружается, тем больше PermGen располагает с интервалами, Вы собираетесь нуждаться.

1
ответ дан 3 December 2019 в 22:37
  • 1
    256 то, что это было настроено в том, прежде чем я вошел так I' m не уверенный, почему это было выбрано. Мы на самом деле останавливаем кота, и перезапуск на каждом развертываются, и он только запускает одно приложение так я don' t думают we' d имеют ту проблему его сохраняющий старые приложения в памяти. В журналах I' ve, никогда не замечаемый это выйти за предел 50 МБ так I' ve устанавливают его на 80 МБ только для предоставления чего-то вроде буфера. –  brad 16 March 2010 в 18:35

Sun заявляет, что permgen является устройством хранения данных для объектов, которые не имеют эквивалентности на языке Java:

Третье поколение, тесно связанное со штатным поколением, является постоянным поколением. Постоянное поколение является особенным, потому что оно содержит данные, необходимые виртуальной машине для описания объектов, которые не имеют эквивалентности на уровне языка Java. Например, объекты, описывающие классы и методы, хранятся в постоянном поколении.

Так да постоянное поколение содержит "внутренние" структуры данных JVM, которые описывают объекты и методы, среди прочего. 256 МБ могли бы быть довольно большими, но это будет зависеть от приложения.

В большом приложении ColdFusion как я работаю, огромная сумма классов создаются для кода ColdFusion, который компилируется на лету, и я работаю с постоянным набором поколения к 192 МБ. Я думаю, что раньше выполнял его успешно на уровне 128 МБ также, таким образом, это - определенно что-то, с чем Вы могли экспериментировать.

Если Вы измерите уровень при загрузке прежде и после настройки этих параметров GC то Вы сможете сказать то, что влияет на Ваши изменения, имеют на производительности Вашего приложения.

Кроме того, документ, который я связал, дает большую информацию о том, как JVM справляется, это - память - это - довольно хорошее чтение.

1
ответ дан 3 December 2019 в 22:37
  • 1
    ya that' s, где я получил свою кавычку также. Я просто wasn' t уверенный, если there' s дополнительный материал, входящий в того генерала перманента кроме моего собственного кода. У меня буквально есть 45 МБ скомпилированного кода. И журналы GC показывают, что permgen обычно колеблется приблизительно 50 МБ –  brad 10 March 2010 в 19:00
  • 2
    Уменьшите его, затем. Почему нет? Попробуйте 128 МБ и позвольте ему работать некоторое время. –  Clint Miller 12 March 2010 в 00:45

Теги

Похожие вопросы