понедельник, 28 февраля 2011 г.

JVM and Permanent generation

О чем речь

Бывает, что выделяешь JVM много оперативной памяти, она тебе все равно падает. И пишет, что переполнение.
Все становится ясно, когда смотришь в профайл и видишь, что во всем виноват Permanent Generation (PG).

Пару слов о PG.

Permanent Generation используется JVM для хранения служебных данных, в том числе метаданные о созданных объектах и т.д. При каждом создании объекта JVM будет сохранять связанный с ним набор данных в PG. Соответственно, чем больше вы создаете объектов разных типов, тем больше пространства требуется в PG.

Как задать размер PG.

Размер PG можно задать двумя параметрами JVM:
-XX:PermSize – задаёт минимальный, или изначальный, размер PG, и -XX:MaxPermSize – задаёт максимальный размер.
При запуске больших Java-приложений лучше задать значения для этих параметров одинаковыми, так что PG создаётся сразу с максимальным размером, что может увеличить производительность, так как изменение размера PG – дорогостоящая (трудоёмкая) операция. Определение одинаковых значений для этих двух параметров может избавить JVM от выполнения дополнительных операций, таких как проверки необходимости изменения размера PG и, естественно, непосредственного изменения.

Доп. ссылки

про сборку муссора в Hotspot JVM
FAQ o PG в Hotspot JVM
Модель памяти в виртуальной Java-машине: Permanent Generation


Комментариев нет:

Отправить комментарий