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

С чего правильно начинать настройку сборщика мусора?

JuniorJVM и сборка мусора
Ещё спрашивают так:
  • Как диагностировать проблемы со сборщиком мусора?
  • Как включить логи GC?
  • С чего корректно начинать тюнинг GC?
Коротко

Начинать с измерений: включить логи GC и понять, в чём проблема — длинные паузы, частые сборки или рост живых данных.

  • Логи: -Xlog:gc* — длительность и частота пауз, сколько памяти остаётся после сборки
  • Часто проблема не в сборщике, а в коде: лишние объекты или удержание ненужных

А ещё Флаги «из статьи» без данных — перебор наугад

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

Подробно

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

Что смотреть в логах GC (-Xlog:gc*:file=gc.log):

  • длительность пауз и их распределение — влияют на время ответа;
  • частота сборок — частые молодые сборки говорят о высокой скорости выделения объектов;
  • объём живых данных после полной сборки — если растёт со временем, похоже на утечку;
  • доля времени, которую приложение тратит на сборку.

Дополнительные инструменты: jstat для онлайн-статистики, Java Flight Recorder и профилировщики выделения памяти, дамп кучи (jcmd <pid> GC.heap_dump) для поиска утечек.

Часто выясняется, что проблема в коде: создание лишних объектов в горячем цикле, неограниченный кэш, удержание больших коллекций. Это лечится правкой кода, а не флагами.

Если дело всё-таки в настройках, типичные шаги: подобрать размер кучи (-Xms/-Xmx), выбрать сборщик под цель (задержка или пропускная способность), задать цель паузы для G1 (-XX:MaxGCPauseMillis).

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

  • Сначала измерения, потом настройка.
  • Что смотреть в логах GC.
  • Понимание, что проблема часто в коде.
  • Инструменты диагностики — плюс.

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

  • Крутить флаги, не посмотрев логи сборки.
  • Наращивать кучу при утечке — это только отсрочит проблему.

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

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

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

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

  • О чём говорит рост занятости старого поколения после каждой сборки?
  • Что показывает скорость выделения объектов?
  • Какие базовые флаги задают первым делом?
  • Что даёт unified logging -Xlog:gc?

Разбор темы

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

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

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

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

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