Что такое паузы garbage collector?
Что проверяют
Понимаете ли вы, откуда берётся пауза, умеете ли её измерить и отличить проблему сборщика от проблемы кода. Заодно смотрят, ориентируетесь ли вы в современных сборщиках или застряли на уровне «включим побольше памяти».
Как отвечать
Пауза это остановка прикладных потоков в безопасной точке, чтобы сборщик сделал работу, которую нельзя совмещать с изменением кучи. Полностью беспаузных сборщиков в поставке нет: у сборщиков с низкой задержкой остаются короткие остановки на обход корней, но их длительность почти не зависит от размера кучи, тогда как у пропускных сборщиков и при полной сборке она растёт вместе с объёмом живых данных.
Ключевая мысль, которую ждут: стоимость копирующей сборки пропорциональна объёму живых объектов, а не количеству мусора. Поэтому короткоживущие объекты почти бесплатны, а большой кэш в куче это налог на каждый цикл сборки.
Диагностика: включить журнал сборки, смотреть распределение пауз и худшие значения, отделять саму паузу от времени выхода в безопасную точку. Типичные причины длинных остановок: высокая скорость аллокации, преждевременное продвижение объектов в старое поколение, очень крупные объекты, неудавшаяся эвакуация с откатом в полную сборку, своп и завышенная куча.
Настройка сводится к выбору сборщика под цель и к размеру кучи; целевое время паузы задаётся как пожелание оптимизатору, а не как гарантия.
Где спотыкаются
Считают, что низколатентный сборщик снимает вопрос. Он убирает длинные остановки, но требует запаса процессора и памяти: если аллокация обгоняет фоновую сборку, поток упирается в ожидание свободной памяти, и для пользователя это тот же самый тормоз, только под другим именем.
Крутят флаги вместо того, чтобы посмотреть на скорость аллокации и на живой набор. Чаще всего лечится кодом: убрать мусор из горячего цикла, не держать в куче то, что можно вынести, ограничить кэш по объёму, а не по числу элементов.
Меряют среднее время паузы и делают вывод, что всё хорошо. Смотреть надо распределение и хвост, а ещё отделять паузу от задержки сервиса: долгий цикл без безопасных точек, своп и блокировки на мониторе дают ровно такую же картину подвисаний, и их лечат совсем иначе.