JBoss 5 perm размер и размер кучи

Есть ли какая-либо связь между размером кучи и постоянным размером для JBoss? Я хотел бы увеличить максимальный размер кучи, но я не уверен, какое влияние это окажет на размер постоянной памяти. Я использую JDK 6. В настоящее время я не сталкиваюсь с проблемами генерации perm, но если я увеличу размер кучи, существует ли неявная связь, которая требует от меня увеличения пространства perm gen? Есть ли какое-то эмпирическое правило, о котором я спрашиваю?


person opensourcegeek    schedule 14.08.2014    source источник
comment
Было бы лучше, если бы вы проверили различия между ними обоими и поняли, какой из них вам нужно увеличить.   -  person Luiggi Mendoza    schedule 14.08.2014


Ответы (2)


Нет, вам не обязательно увеличивать размер perm gen, если вы увеличиваете общий размер кучи. Пространство perm gen содержит классы, загруженные JVM. Если ваше развернутое приложение не меняется, объем данных для хранения в перманентном пространстве генерации также остается прежним, даже если общее доступное пространство кучи увеличивается.

Отношение скорее обратное - если вы увеличите размер perm gen, у вас будет меньше места в куче, доступного для вашего приложения -> в этом случае вы, вероятно, также рассмотрите возможность увеличения общего размера кучи.

person Jack    schedule 14.08.2014

Чтобы понять кучу и permgen, возможно, следующее объяснение того, что хранится в PermGen (или Metaspace в Java 8), поможет понять как цель permgen, так и отличие от кучи:

Если вы помните, все в Java представлено как объект. Кроме того, все объекты являются экземплярами определенного класса. Даже сами объявления классов в конечном итоге являются очень специфическими объектами. Но что делает объявления классов интересными, так это тот факт, что на большинстве JVM объявления классов загружаются в определенную область памяти, называемую постоянным поколением (сокращенно PermGen). Итак, резюмируем: все классы Java загружаются и хранятся в Java PermGen.

Это состоит из следующего:

  • Названия классов
  • Поля класса
  • Методы класса с байт-кодом методов
  • Постоянная информация о пуле
  • Массивы объектов и массивы типов, связанные с классом
  • Оптимизация компилятора Just In Time

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

Как видите, требования к размеру PermGen сильно зависят как от количества загруженных классов, так и от размера объявлений таких классов. Итак, в общем, чем больше классов в приложении вы загружаете в JVM, тем больше PermGen вам понадобится.

person Ivo    schedule 24.08.2014