Garbage-First (G1) Garbage Collector работает следующим образом: help.meriloft.com
- Память разбивается на множество регионов одинакового размера. habr.com Размер этих регионов зависит от общего размера кучи и по умолчанию выбирается так, чтобы их было не больше 2048, обычно получается от 1 до 32 МБ. habr.com Исключение составляют только так называемые громадные (humongous) регионы, которые создаются объединением обычных регионов для размещения очень больших объектов. habr.com
- G1 выполняет параллельную глобальную фазу пометки, чтобы определить жизнеспособность объектов по всей куче. help.meriloft.com После завершения фазы пометки G1 знает, какие регионы в основном пустые. help.meriloft.com Он собирает эти регионы первыми, что часто даёт большой объём свободного пространства. help.meriloft.com
- G1 освобождает пространство в основном с помощью эвакуации. docs.oracle.com docs.oracle.com Живые объекты, найденные в выбранных для сбора областях памяти, копируются в новые области памяти, уплотняя их в процессе. docs.oracle.com docs.oracle.com После завершения эвакуации пространство, ранее занимаемое живыми объектами, повторно используется приложением для распределения. docs.oracle.com docs.oracle.com
- G1 использует модель прогнозирования пауз, чтобы достичь определённого пользователем целевого времени паузы, и выбирает количество регионов для сбора на основе указанного целевого времени паузы. help.meriloft.com
Важно отметить, что G1 не является сборщиком в реальном времени. docs.oracle.com help.meriloft.com Он пытается достичь установленных целевых значений времени паузы с высокой вероятностью в течение более длительного времени, но не всегда с абсолютной уверенностью для данной паузы. docs.oracle.com docs.oracle.com