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

Что означает пауза stop-the-world при сборке мусора?

JuniorJVM и сборка мусора
Ещё спрашивают так:
  • Почему сборщик мусора останавливает приложение?
  • Какие сборщики мусора есть в Java?
Коротко

Stop-the-world — все потоки приложения приостанавливаются, пока сборщик выполняет часть работы; эти паузы и стараются сокращать.

  • Остановка нужна, чтобы граф объектов не менялся в критические моменты
  • Современные сборщики (G1, ZGC, Shenandoah) делают основную работу параллельно, паузы короткие

А ещё Длинные паузы напрямую превращаются во всплески времени ответа

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

Подробно

Чтобы корректно найти живые объекты и переместить их, сборщику нужно, чтобы приложение не меняло ссылки в критические моменты. Поэтому JVM останавливает все потоки приложения в безопасных точках (safepoint) — это пауза stop-the-world (STW).

Сборщики отличаются тем, какую часть работы делают во время паузы:

  • Serial и Parallel — основная работа во время паузы; Parallel использует много потоков и даёт хорошую пропускную способность, но паузы длиннее;
  • G1 — сборщик по умолчанию: куча разбита на регионы, есть цель по длительности паузы, часть работы идёт параллельно с приложением;
  • ZGC и Shenandoah — почти вся работа конкурентная, паузы — доли миллисекунды независимо от размера кучи, ценой дополнительной нагрузки на процессор.

Практическое значение: длинная пауза — это запросы, которые в этот момент ждут, и всплеск на графике времени ответа (p99). Выбор сборщика — компромисс между пропускной способностью, задержкой и расходом памяти и CPU. Паузы видны в логах GC (-Xlog:gc).

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

  • Что такое пауза STW и зачем она нужна.
  • Как современные сборщики сокращают паузы.
  • Влияние пауз на время ответа.
  • Названия основных сборщиков — плюс.

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

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

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

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

Показать варианты и ответ
  • ✓Потоки приложения приостанавливаются, пока сборщик выполняет часть работы
  • ✗Приложение полностью завершает работу и перезапускается
  • ✗Сборщик останавливается, уступая процессор приложению
  • ✗Все сетевые соединения закрываются на время сборки

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

  • Почему конкурентная маркировка требует барьеров записи?
  • Как выбирают между сборщиками?

Разбор темы

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

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

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

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

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