Comments 22
Смешались в кучу кони, люди... (c)
🔴 Что такое Stop-The-World
📍 Зачем нужны SafePoints
🧩 Что делает функция GC_POLL()
🧹 Что делает GC
Зачем тут этот пёстрый мусор? Почему на GC_POLL() пазл, он сломан и его надо пересобрать?
Перестаньте копировать текст из ИИ без редактирования, это неопрятно.
Маловато технических деталей и не хватает сравнения с bdwgc, но как идея статьи - интересновое.
Я пока не пойму свой формат))
С одной стороны, много технических деталей - легко уйти в сторону, статья раздувается, люди не хотят читать)
С другой, я сам лично не понимаю, как без техники, можно быстро объяснить такую сложную концепцию, как сборку мусора))
Вообщем это ИТ сообщество, одним нужно погружение, другим по верхам) Куда склоняться, непонятно))
Попробуй всё-таки найти свою нишу. Я вот нашёл такую нишу - FTN-сети, и Фидонет в частности.
Не знаю, как другие, я лично хотел бы видеть больше технических подробностей в статьях. Хабр вообще по сути золотая середина между чисто научными публикациями и научпопом (или по крайней мере должен ей быть) - понятный язык, свободный формат и техническая содержательность.
Если вы использовали .NET чтобы рассказать как работает GC то ваша интерпретация очень далека от того как он работает - там нет GC_POLL вызовов в коде (за очень редким исключением аля pinvokes) циклах и т.п.
Я подписал, что GC_POLL - это для упрощения, обычно везде ассемблерная вставка прыжка и call, если флаг поднят, в статье подписано


Вот оно, раскидано везде по C# коду
В первом на одну строчку ниже выделил, ну да ладно
Нет. это не GC poll, вы смотрите дебажный асм (даже если запустили в Release, т.к. при отладке вижла всегда сбрасывает код в Tier0-dbg) и условный переход который вы мне показываете это
cmp dword ptr [(reloc 0x7ffe048bca18)], 0
je SHORT G_M000_IG04
G_M000_IG03: ;; offset=0x0021
call CORINFO_HELP_DBG_IS_JUST_MY_CODE
Это подсказка деббагеру что код вошёл в "my code" для фичи "Debug just my code"
Ещё раз повторю - .NET не использует явные сейф поинты (как, например, Java) - у этого подхода свои плюсы/минусы.
да, посидев за другим отладчиком, вы правы, похоже GC .net останавливает потоки в основном на аккокаторах и еще по всячески хитро...
По сути этот cmp меня и погубил, похож собака на классику...
похоже GC .net останавливает потоки в основном на аккокаторах
это не так. часть методов в дотнет полностью fully interruptible и в какой момент бы поток не приостановился - он будет в сейфпоинте. в других методах используется return address hijacking т.е. любой вызов любого метода становится потенциальным сейфпоинтом.
Плюсы: никаких лишних инструкций в циклах и где либо еще, мгновенная остановка треда в fully-interruptible
Минусы: большой (по размеру) GC info (чтобы precise GC знал что сканировать на каждой инструкции fully-interruptible метода. Менее прогнозируемое время до паузы при call hijacking. необходимость сохранять и ресторить return address в стек в каждом методе
В Swift используется ARC, а не Garbage Collector — это совершенно разные вещи
Как вы всё надоели...
Смысл в том, чтобы чувак, который будет читать статью, просто понял один из вариантов реализации, завтра будет другой, на джаве, свифте, на все-равно....
В любом случае, если есть спец. по конкретному GC, я бы попросил в комментариях 2 слова о подробностях работы, а не спам типа "аааа этот не так"
Как GC останавливает весь мир, чтобы вынести мусор