Получить доступ

Зачем в молодом поколении две области Survivor, а не одна?

MiddleJVM и сборка мусора
Коротко

Копирующему сборщику нужна пустая область назначения: живые из Eden и занятого Survivor копируются в свободный Survivor, после чего Eden и бывший Survivor очищаются целиком, а роли областей меняются.

  • С одной областью пришлось бы уплотнять на месте — дорого
  • Каждое копирование увеличивает возраст объекта
  • Не поместились в Survivor — досрочно в старое поколение

А ещё Соотношение Eden и Survivor — SurvivorRatio, по умолчанию 8:1:1

Так подсказку видит пользователь sotto на живом собеседовании — за пару секунд, пока вы думаете вслух.

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

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

Подробно

Схема такая: объекты рождаются в Eden; при minor GC живые копируются в свободный Survivor, Eden и второй Survivor очищаются целиком, затем области меняются местами. Каждое переживание увеличивает счётчик возраста, и по достижении tenuring threshold объект продвигается в старое поколение. Досрочное продвижение случается, когда Survivor не вмещает выживших — это плохой признак, ведущий к преждевременному заполнению старого поколения и учащению дорогих сборок. Крупные объекты могут попадать в старое поколение сразу, минуя молодое.

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

  • Механика копирования из одного в другой.
  • Почему одной области мало.

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

  • Считать, что объект попадает в старое поколение сразу после первой сборки.
  • Не замечать преждевременное продвижение как причину частых full GC.

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

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

Показать варианты и ответ
  • ✓Копирующий сборщик переносит выживших из Eden и занятого Survivor в свободный, после чего области меняются ролями — это даёт уплотнение без фрагментации
  • ✗Одна хранит короткоживущие объекты, другая — длинноживущие
  • ✗Вторая нужна как резерв на случай переполнения первой
  • ✗Одна используется приложением, другая — сборщиком для служебных структур

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

  • Что означает частое преждевременное продвижение и как его лечить?
  • Чем регионы G1 отличаются от классической схемы Eden/Survivor?

Разбор темы

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

Закрытая бета

Подсказки на собеседовании — в реальном времени

sotto слышит вопрос интервьюера и показывает короткий ответ и план, как в блоке «Коротко». Оставьте контакт — пришлём доступ и промокод.

  • Промокод на 2 часа — сверх пробных 30 минут
  • Программа для Windows — скачать сразу, войти — через Яндекс ID или VK ID
  • Прямая связь с разработчиком: что улучшить — сделаем