Подтвердить что ты не робот

#ИМЯ?

Мы столкнулись с ошибкой Java.lang.OutOfMemoryError: PermGen space и рассмотрим параметры JVM tomcat, кроме параметров -Xms и -Xmx, которые мы также указываем -XX:MaxPermSize=128m, После небольшого профилирования я иногда вижу сборку мусора на пространстве PermGen, экономя ее от полной работы.

Мой вопрос: кроме увеличения -XX:MaxPermSize какая разница, если я также укажу -XX:PermSize? Я знаю, что общая память тогда будет Xmx + maxPermSize, но есть ли другая причина, почему -XX:PermSize должен не быть там, когда указан -XX:MaxPermSize?

Пожалуйста, поделитесь, если у вас есть реальный опыт работы с этими параметрами JVM.

пс. JVM - это серверная VM-версия HotSpot 64-бит 16.2-b04

4b9b3361

Ответ 1

-XX:PermSize указывает начальный размер, который будет выделен при запуске JVM. При необходимости JVM будет выделять до -XX:MaxPermSize.

Ответ 2

Играя с параметрами -XX:PermSize и -Xms, вы можете настроить производительность - например, запуск вашего приложения. Я не смотрел на него недавно, но несколько лет назад значение по умолчанию -Xms было чем-то вроде 32 МБ (я думаю), если вашему приложению потребовалось намного больше, чем это вызвало бы несколько циклов заполнения памяти - полный сбор мусора - увеличить память и т.д., пока он не загрузил все необходимое. Этот цикл может быть вредным для производительности при запуске, поэтому немедленное присвоение необходимого номера может улучшить запуск.

Аналогичный цикл применяется к постоянному поколению. Таким образом, настройка этих параметров может улучшить запуск (в частности).

ПРЕДУПРЕЖДЕНИЕ JVM имеет много оптимизаций и интеллекта, когда речь идет о распределении памяти, разделении пространства и старых поколений и т.д., поэтому не делайте таких действий, как -Xms, равный -Xmx или -XX:PermSize, равным -XX:MaxPermSize, поскольку он удалит некоторые из оптимизаций, которые JVM может применить к его стратегиям распределения, и для этого снижать производительность вашего приложения, а не улучшать его.

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

Ответ 3

Если вы выполняете некоторую настройку производительности, часто рекомендуется установить для обоих значений -XX:PermSize и -XX:MaxPermSize то же значение, чтобы повысить эффективность JVM.

Вот некоторая информация:

Вы также можете указать -XX:+CMSClassUnloadingEnabled, чтобы включить разгрузку классов если вы используете CMS GC. Это может помочь уменьшить вероятность Java.lang.OutOfMemoryError: PermGen space