(Для Перейти 1.8 - 1 квартал 2017 года, см. Ниже )
Следующий переход 1.5 одновременный Сборщик мусора предполагает возможность «шагать» по указанному gc.
Вот предложение, представленное в этой статье , которое может сделать его для Go 1.5, но также помогает понять gc в Go.
Вы можете увидеть состояние до 1.5 (Stop The World: STW)
До Go 1.5 Go использовал параллельный коллектор Stop-the-World (STW).
Во время сбора STWимеет много минусов, по крайней мере, имеет предсказуемое и контролируемое поведение роста кучи.

(Фото с GopherCon 2015 презентация " Go GC: решение проблемы задержки в Go 1.5 ")
Единственной ручкой настройки для коллектора STW был« GOGC », относительный рост кучи между коллекциями.Значение по умолчанию, 100%, запускает сборку мусора каждый раз, когда размер кучи удваивается по сравнению с размером динамической кучи по сравнению с предыдущей коллекцией:

Время GC в STWсборщик.
Go 1.5 представляет одновременный сборщик .
Это имеет много преимуществ по сравнению со сбором STW, но его рост в куче труднее контролироватьпотому что приложение может выделять память во время работы сборщика мусора .

(Фото с GopherCon 2015 презентация " Go GC: решение проблемы задержки в Go 1.5 ")
Для достижения того же предела роста кучи среда выполнения должна начинать сборку мусора раньше, но насколько раньше это зависит от многих переменных, многие из которых не могут быть предсказаны,
- Запустите сборщик слишком рано, и приложение выполнит слишком много сборок мусора, тратя ресурсы ЦП.
- Запустите сборщик слишком поздно, и приложение превысит желаемый максимальный рост кучи.
Достижение правильного баланса без ущерба для параллелизма требует тщательной стимуляции сборщика мусора.
Шаг GC направлен на оптимизацию по двум измерениям: увеличение кучи и загрузка ЦП сборщиком мусора.

Конструкция GC-кардиостимуляции состоит из четырех компонентов:
- оценщик для объема сканирования работы цикла GCпотребуется
- механизм для мутаторов, чтобы выполнить расчетный объем работы сканирования к тому времени, когда выделение кучи достигнет цели кучи,
- планировщик для фонового сканирования, когда помощь мутатора приводит к недостаточному использованию бюджета ЦП,и
- пропорциональный контроллер для триггера ГХ.
В проекте сбалансировано два разных представления времени: время ЦП и время кучи .
- Процессорное время похоже на стандартное время настенных часов, но проходит в
GOMAXPROCS
раз быстрее.
То есть, если GOMAXPROCS
равно 8, то проходит восемь секунд процессоракаждую секунду, и GC получает две секунды времени ЦП каждую секунду.
Планировщик ЦП управляет временем ЦП. - Прохождение времени кучи измеряется в байтах и движется вперед по мере выделения мутаторами.
Взаимосвязь между временем кучи и временем стены зависит от скорости выделения и может постоянно изменяться.
Mutator помогает управлять прохождением времени кучи, обеспечивая завершение предполагаемой работы сканирования к тому временикуча достигает целевого размера.
Наконец, контроллер триггера создает цикл обратной связи, который связывает эти два представления времени вместе, оптимизируя как целое время кучи, так и целевое время процессора.