Ответ 1
Вот все, что я мог бы выкопать на эту тему.
Я нашел некоторое обсуждение о Go GC safepoints здесь.
Похоже, что безопасные точки (используемые в реализации Go) фактически аналогичны традиционному определению безопасной точки:
где GC может отслеживать, что все переменные и регистры удерживая нажатой клавишу
Другой пользователь в том же потоке упоминает, что GC
складывает точки превенции в проверки стека во время функции prologs
и что источником для этого утверждения является следующее: https://github.com/golang/go/issues/10958
В соответствии с этот пост в списке рассылки golang-dev, safepoints также называются "сайтами вызовов".
Чтобы получить некоторое представление о природе безопасных точек Go, я считаю важным рассмотреть эволюцию своего GC. В этом сообщении упоминается следующее:
До Go 1.5, Go использовал параллельный stop-the-world (STW) коллектор.
В Go 1.5 вводится параллельный сборщик.
Еще один ответ на этот вопрос:
Начиная с Go 1.7, один оставшийся источник неограниченного и потенциального нетривиальное время остановки (World) (STW) - это повторное сканирование стека.
Начиная с версии 1.8, это выглядит как в худшем случае время прекращения мира улучшено.
Кроме того, здесь является текущей реализацией сборщика мусора Go. Если вы прочтете комментарии, вы увидите, что это сборщик маркеров без генерации. Подробнее об этом можно прочитать здесь: https://blog.plan99.net/modern-garbage-collection-911ef4f8bd8e#.udz1kjk3b
Наконец, здесь - это старый пост Гила Тене в списке рассылки golang-dev, который мотивирует использование движущегося сборщика мусора. Он утверждал (в то время, в 2012 году), что Go использовал "консервативный, неперемещающийся коллекционер", и он обсудил характеристики safepoints, которые позволили бы длинному сборщику мусора.
В то время как Go сборщик мусора был отходит от длинных пауз и теперь является "параллельным, трехцветным, собирающим метки", он по-прежнему является негенеративным GC. Похоже, что Go GC строится на идеях GC от 70-х годов, а не современных, корпоративных подходов.
Похоже, что понятие "точка-точка" в Go больше соответствует традиционному понятию safepoint, а не safepoint с современными качествами, которые позволяют сборку мусора для генерации.