Может кто-нибудь объяснить, как работает сборщик мусора G1? Я еще не смог найти исчерпывающих и понятных описаний.
Спасибо
Может кто-нибудь объяснить, как работает сборщик мусора G1? Я еще не смог найти исчерпывающих и понятных описаний.
Спасибо
Коллектор разбивает кучу в области фиксированного размера и отслеживает текущие данные в этих регионах. Он хранит набор указателей - "запоминаемый набор" - в и из региона. Когда GC считается необходимым, он сначала собирает регионы с меньшим количеством живых данных (следовательно, сначала "мусор" ). Часто это может означать сбор всего региона за один шаг: если количество указателей в области равно нулю, тогда ему не нужно делать отметку или развертку этой области.
Для каждого региона он отслеживает различные показатели, которые описывают, сколько времени потребуется для их сбора. Вы можете дать ему мягкое ограничение в режиме реального времени о временах паузы, а затем попытаться собрать столько мусора, сколько возможно в это ограниченное время.
Есть разговоры JavaOne о G1 и несколько статей по теме:
G1 хорошо объясняется также в этом новом сеансе JavaOne 2012: Настройка производительности сборщика мусора G1 youtube], [PDF].
Они начинаются с введения CMS и G1, их сравнения, а затем объясняется анализ и настройка G1.
Характеристики G1
Типичная куча G1 может выглядеть так:
Вот краткое изложение каждой фазы G1:
1.1 Молодая фаза - Малый GC
1.2 Молодой/начальный знак
2.1 Начальный знак - см. 1.2.
2.2 Замечание GC
2,3. Пауза GC (смешанная)
Обратите внимание, что G1 предназначен для того, чтобы избежать полного GC как можно большего. Начиная с Java 7u40, паузы FullGC в G1 не оптимизированы и реализованы как однопоточная операция. При использовании G1 старайтесь избегать Full GC - если вы видите какие-либо паузы в FullGC, ваша настройка GC, возможно, потребует некоторой настройки.