Comments 14
зачем нужен
всё же лучше быть аккуратнее с подобными "популистскими" фразами в заголовках, а то так можно и до статьи "C# - зачем он нужен" дойти со временем :)
Ого, копипаста от гпт. Спасибо!
Простыми словами, поколения нужны для оптимизации, что бы каждый раз не перебирать всю кучу и не тратить на это все ресурсы.
Это не совсем верно. Для определения недостижимых объектов куча всё равно "перебирается" вся целиком, т.к. осуществляется построение и обход графа всех объектов независимо от поколений.
А вот последующие этапы сборки мусора (освобождение памяти, дефрагментация) уже оптимизируются за счёт механизм поколений т.к. выполняются не на всей куче, а на поколении.
Очень сомнительная поправка про "всю кучу", в большинстве случаев ГЦ сканит конкретно одно поколение + области памяти в которых могут быть ссылки на первое поколение (это когда write barrier оставляет в записи в card table каждый раз когда вы любой объект присваиваете в поле другого на хипе) + руты где бы они не были
хм, спасибо за информацию!
Однажды была проблема, подключил нативную библиотеку и установил значение внутри нее через c#, так GC просто очищал значения которые я устанавливал, ошибку понял не сразу пришлось звать коллегу который шарит за ++
Стек (Stack)
Куча (Heap)
Поколения (Generations)
Как же сильно бросаются в глаза подобные моменты. Настолько наглой и очевидной копипасты из нейронки я ещё не видел.
Garbage Collector в .NET: как работает и зачем нужен?