Почему чаще проверяется молодое поколение в Garbage Collector Java
Что проверяют
Знаете ли вы гипотезу о поколениях и понимаете ли, почему копирующая сборка молодого поколения дёшева. Это проверка на то, разбираетесь ли вы в работе JVM или знаете только названия Minor GC и Full GC.
Как отвечать
В основе лежит слабая гипотеза о поколениях: подавляющее большинство объектов умирает молодыми. Куча делится на молодое поколение (Eden и две области выживших) и старое.
Сборка молодого поколения копирующая: живые объекты переносятся из Eden и одной области выживших в другую, а всё остальное просто перестаёт существовать. Мёртвые объекты не обходятся вообще, поэтому стоимость пропорциональна объёму выживших, а не размеру региона. При малой доле выживших такая сборка почти бесплатна, её и делают часто.
Второй довод про скорость выделения памяти: новый объект размещается сдвигом указателя внутри буфера потока, без поиска свободного места. Eden наполняется быстро, и сборка запускается по факту его заполнения.
Объекты, пережившие несколько сборок, по счётчику возраста продвигаются в старое поколение. Там сборка дороже: живых данных много, нужна разметка и уплотнение либо конкурентная фаза, паузы длиннее. Чтобы не сканировать старое поколение ради ссылок в молодое, JVM держит таблицу карт и барьер записи, которые помечают изменённые области.
Полезно добавить, что в G1 деление на поколения логическое, по регионам, а не по непрерывным областям, и сборщик выбирает регионы с наибольшей долей мусора.
Где спотыкаются
Отвечают «молодое поколение меньше, поэтому быстрее». Размер сам по себе ничего не решает: стоимость задаёт объём выживших. Молодое поколение с высокой выживаемостью собирается медленно, и это как раз симптом неудачных размеров.
Считают, что сборка молодого поколения идёт без остановки приложения. Она останавливает мир, просто пауза короткая. Без пауз работают только отдельные фазы конкурентных сборщиков.
Путают сборку старого поколения с Full GC. Первая в современных сборщиках во многом конкурентная, вторая аварийный сценарий с полным уплотнением и длинной паузой.