Почему переход с последовательного GC на G1 увеличивает RSS

У меня есть образец приложения с начальным размером RSS 600 МБ при использовании последовательного GC. Как только я использую G1 RSS, память после начальной загрузки увеличивается до 800 МБ.

Кто-нибудь знает, как я могу профилировать это увеличение и когда есть какие-либо параметры настройки G1 для улучшения объема памяти?


person Petro Semeniuk    schedule 28.06.2015    source источник


Ответы (1)


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

Придерживайтесь последовательного gc или параллельного сборщика пропускной способности.

Тем не менее, вы можете попробовать следующее: -XX:MaxHeapFreeRatio=30 -XX:MinHeapFreeRatio=20 -XX:InitiatingHeapOccupancyPercent=30, это должно указать G1 более агрессивно отдавать память ОС и начать собирать память старого поколения раньше.

person the8472    schedule 28.06.2015
comment
Спасибо. У меня уже есть пользовательские XX: MaxHeapFreeRatio, XX: MinHeapFreeRatio и XX: InitiatingHeapOccupancyPercent, поэтому я думаю, что 800 МБ - лучший объем памяти, который я мог получить. - person Petro Semeniuk; 29.06.2015
comment
в следующий раз упомяните что-нибудь подобное - person the8472; 29.06.2015
comment
;-) Вопрос актуален, так как я при прочих равных перехожу с последовательного на g1. - person Petro Semeniuk; 29.06.2015
comment
Вы поступили правильно. Я видел отличные результаты с G1GC. Взгляните на: stackoverflow.com/questions/574021/ и - person Ravindra babu; 14.12.2015