Garbage collector

Garbage collector


Мы знаем, что для очистки heap’a java использует сборщик мусора.

На данный момент используется G1, его включили в работу с Java 9 и на данный он является основным.

Принцип работы

Память разбивается на множество регионов одинакового размера. Размер этих регионов зависит от общего размера кучи и по умолчанию выбирается так, чтобы их было не больше 2048, обычно получается от 1 до 32 МБ. Исключение составляют только так называемые громадные регионы.

Малые сборки выполняются периодически для очистки младшего поколения и переноса объектов в регионы Survivor, либо их повышения до старшего поколения с переносом в Tenured. Над переносом объектов трудятся несколько потоков, и на время этого процесса работа основного приложения останавливается. Очистка выполняется не на всем поколении, а только на части регионов, которые сборщик сможет очистить не превышая желаемого времени. При этом он выбирает для очистки те регионы, в которых, по его мнению, скопилось наибольшее количество мусора и очистка которых принесет наибольший результат.


А с полной сборкой (точнее, здесь она называется смешанной (mixed)) в G1 существует процесс, называемый циклом пометки (marking cycle), который работает параллельно с основным приложением и составляет список живых объектов: 

  • Initial mark. Пометка корней (с остановкой основного приложения) с использованием информации, полученной из малых сборок.
  • Concurrent marking. Пометка всех живых объектов в куче в нескольких потоках, параллельно с работой основного приложения.
  • Remark. Дополнительный поиск не учтенных ранее живых объектов (с остановкой основного приложения).
  • Cleanup. Очистка вспомогательных структур учета ссылок на объекты и поиск пустых регионов, которые уже можно использовать для размещения новых объектов. Первая часть этого шага выполняется при остановленном основном приложении.


Про гиганты

С точки зрения JVM любой объект размером больше половины региона считается громадным и обрабатывается специальным образом:

  • Он никогда не перемещается между регионами.
  • Он может удаляться в рамках цикла пометки или полной сборки мусора.
  • В регион, занятый громадным объектом, больше никого не подселяют, даже если в нем остается свободное место.

Краткий пересказ вот отсюда:

https://habr.com/ru/post/269863/



Report Page