Вопрос с собеседования · Java

На какой гипотезе построено разделение кучи на поколения?

MiddleJVM и сборка мусора
Ещё спрашивают так:
  • Как из гипотезы о поколениях следует устройство minor GC?
  • На какой гипотезе построено поколенческое разделение кучи и как из неё следует устройство minor GC?
Коротко

Слабая гипотеза о поколениях: почти все объекты умирают молодыми, а пережившие несколько сборок живут долго. Отсюда молодое поколение с копирующим сборщиком: цена сборки пропорциональна числу живых, а их мало — minor GC дёшев.

  • Выделение в Eden — сдвиг указателя
  • Возраст растёт с каждой сборкой, после порога tenuring — в старое поколение
  • Старое собирают редко и другими алгоритмами
  • Ссылки из старого в молодое отслеживает card table

А ещё Мал Survivor — преждевременное продвижение мусора и частые full GC

Попробуйте сами

GC: Eden, Survivor и продвижение

Подробно

Из этой гипотезы вытекает вся конструкция. Раз в молодом поколении почти всё мертво, там выгоден копирующий сборщик: он переносит немногих выживших, а стоимость работы пропорциональна живым объектам, а не мусору — поэтому minor GC дёшев. Старое поколение, где мусора мало, собирают другими алгоритмами (пометка-очистка или пометка-сжатие) и заметно реже. Практическое следствие для кода: короткоживущие объекты в Java дёшевы, и бороться с их созданием ради «экономии на GC» обычно вредно.

Что хотят услышать

  • Формулировка гипотезы.
  • Вывод из неё конструкции молодого поколения.
  • Продвижение и сбой схемы.

Частые ошибки

  • Считать, что аллокация объекта в Java дорога сама по себе.
  • Путать причину и следствие: поколения появились из-за статистики жизни объектов, а не наоборот.

Проверьте себя

Один верный вариант. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✓Большинство объектов умирает молодыми, а выжившие живут долго
  • ✗Число объектов в куче растёт линейно со временем работы приложения
  • ✗Большие объекты всегда живут дольше маленьких и сразу идут в old
  • ✗Объекты, созданные в одном потоке, умирают одновременно с ним

Что спросят дальше

  • Почему копирующий сборщик эффективен именно в молодом поколении?
  • Что такое tenuring threshold?
  • Что такое TLAB и как он ускоряет выделение памяти?
  • Почему у G1 понятие поколений сохранилось, хотя куча разбита на регионы?

Разбор темы

Связанные вопросы

Партнёр платформы

Разбор собеседования с sotto

После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.

Разбор собеседования