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

Зачем при конкурентной маркировке сборщику нужны барьеры записи?

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

Пока сборщик маркирует, приложение меняет ссылки: может перенести ссылку с непросмотренного объекта на уже просмотренный — живой объект останется непомеченным и будет освобождён. Барьер записи — код, вставленный JIT в каждую запись ссылки, сообщает сборщику об изменении.

  • Трёхцветная маркировка: белый, серый, чёрный
  • G1 — SATB (snapshot at the beginning): помнит старое значение ссылки
  • ZGC и Shenandoah — ещё и барьеры чтения для конкурентного перемещения

А ещё Цена — немного CPU на каждую запись ссылки

Подробно

Проблема в том, что пока сборщик обходит граф, приложение может переставить ссылку с ещё не просмотренного участка на уже просмотренный: объект окажется достижимым, но помеченным не будет, и его освободят — это разрушило бы корректность. Барьер записи — небольшой фрагмент кода, вставляемый компилятором в каждую операцию присваивания ссылки, — фиксирует такие изменения, чтобы сборщик их учёл. Разные сборщики используют разные схемы, например снимок на начало цикла в G1. Отсюда следует важная мысль для собеседования: конкурентные сборщики не бесплатны — они переносят часть работы в потоки приложения и слегка замедляют каждую запись ссылки, покупая за это короткие паузы. Полностью избавиться от остановок тоже не выходит: короткие паузы нужны хотя бы для обхода корней.

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

  • Проблема потерянного объекта.
  • Что делает барьер.
  • Подходы разных сборщиков.

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

  • Считать конкурентную сборку полностью бесплатной для приложения.
  • Думать, что современные сборщики совсем не останавливают приложение.

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

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

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

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

  • Почему даже у ZGC остаются короткие паузы?
  • Что такое safepoint и зачем он нужен?

Разбор темы

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

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

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

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

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