На какой гипотезе построено разделение кучи на поколения?
- Как из гипотезы о поколениях следует устройство minor GC?
- На какой гипотезе построено поколенческое разделение кучи и как из неё следует устройство minor GC?
Слабая гипотеза о поколениях: почти все объекты умирают молодыми, а пережившие несколько сборок живут долго. Отсюда молодое поколение с копирующим сборщиком: цена сборки пропорциональна числу живых, а их мало — minor GC дёшев.
- Выделение в Eden — сдвиг указателя
- Возраст растёт с каждой сборкой, после порога tenuring — в старое поколение
- Старое собирают редко и другими алгоритмами
- Ссылки из старого в молодое отслеживает card table
А ещё Мал Survivor — преждевременное продвижение мусора и частые full GC
Подробно
Из этой гипотезы вытекает вся конструкция. Раз в молодом поколении почти всё мертво, там выгоден копирующий сборщик: он переносит немногих выживших, а стоимость работы пропорциональна живым объектам, а не мусору — поэтому minor GC дёшев. Старое поколение, где мусора мало, собирают другими алгоритмами (пометка-очистка или пометка-сжатие) и заметно реже. Практическое следствие для кода: короткоживущие объекты в Java дёшевы, и бороться с их созданием ради «экономии на GC» обычно вредно.
Что хотят услышать
- Формулировка гипотезы.
- Вывод из неё конструкции молодого поколения.
- Продвижение и сбой схемы.
Частые ошибки
- Считать, что аллокация объекта в Java дорога сама по себе.
- Путать причину и следствие: поколения появились из-за статистики жизни объектов, а не наоборот.
Проверьте себя
Один верный вариант. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✓Большинство объектов умирает молодыми, а выжившие живут долго
- ✗Число объектов в куче растёт линейно со временем работы приложения
- ✗Большие объекты всегда живут дольше маленьких и сразу идут в old
- ✗Объекты, созданные в одном потоке, умирают одновременно с ним
Что спросят дальше
- Почему копирующий сборщик эффективен именно в молодом поколении?
- Что такое tenuring threshold?
- Что такое TLAB и как он ускоряет выделение памяти?
- Почему у G1 понятие поколений сохранилось, хотя куча разбита на регионы?
Разбор темы
- GC: поколения и продвижение объектов
Гипотеза о поколениях, Eden и Survivor, minor GC через копирование, tenuring и преждевременное продвижение.
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.