Зачем в молодом поколении две области Survivor, а не одна?
Копирующему сборщику нужна пустая область назначения: живые из Eden и занятого Survivor копируются в свободный Survivor, после чего Eden и бывший Survivor очищаются целиком, а роли областей меняются.
- С одной областью пришлось бы уплотнять на месте — дорого
- Каждое копирование увеличивает возраст объекта
- Не поместились в Survivor — досрочно в старое поколение
А ещё Соотношение Eden и Survivor — SurvivorRatio, по умолчанию 8:1:1
Подробно
Схема такая: объекты рождаются в Eden; при minor GC живые копируются в свободный Survivor, Eden и второй Survivor очищаются целиком, затем области меняются местами. Каждое переживание увеличивает счётчик возраста, и по достижении tenuring threshold объект продвигается в старое поколение. Досрочное продвижение случается, когда Survivor не вмещает выживших — это плохой признак, ведущий к преждевременному заполнению старого поколения и учащению дорогих сборок. Крупные объекты могут попадать в старое поколение сразу, минуя молодое.
Что хотят услышать
- Механика копирования из одного в другой.
- Почему одной области мало.
Частые ошибки
- Считать, что объект попадает в старое поколение сразу после первой сборки.
- Не замечать преждевременное продвижение как причину частых full GC.
Проверьте себя
Один верный вариант. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✗Одна хранит короткоживущие объекты, другая — длинноживущие
- ✗Вторая нужна как резерв на случай переполнения первой
- ✓Выживших копируют из Eden и одной области в пустую — без фрагментации
- ✗Одна используется приложением, другая — сборщиком мусора
Что спросят дальше
- Что означает частое преждевременное продвижение и как его лечить?
- Чем регионы G1 отличаются от классической схемы Eden/Survivor?
Разбор темы
- GC: поколения и продвижение объектов
Гипотеза о поколениях, Eden и Survivor, minor GC через копирование, tenuring и преждевременное продвижение.
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.