Карточка Middle GC, IDisposable и производительность обновлено
Корни сборщика мусора
Вопрос
Что считается корнями GC?
Попробуйте сами
Ответьте про себя или вслух, потом откройте ответ и сверьтесь.
Показать ответ и разбор
Коротко
- Локальные переменные и параметры активных методов (стек и регистры). - Статические поля. - GC handles: закреплённые (fixed, GCHandle.Alloc), сильные дескрипторы. - Очередь финализации (объекты, ожидающие финализатор). Всё, что достижимо от корней, живо, остальное мусор.
Ответ
- Локальные переменные и параметры активных методов (стек и регистры).
- Статические поля.
- GC handles: закреплённые (
fixed,GCHandle.Alloc), сильные дескрипторы. - Очередь финализации (объекты, ожидающие финализатор). Всё, что достижимо от корней, живо, остальное мусор.
Разбор
JIT в Release может считать локальную переменную мёртвой ещё до конца метода, поэтому объект собирается раньше, чем кажется.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Ещё по теме «GC, IDisposable и производительность»
- ArrayPool и аренда буферов
- Где выделит память лямбда в цикле
- Зачем GC.SuppressFinalize в Dispose
- Шаблон Dispose
- Когда реализовывать IDisposable
- Быстрый разбор большого ввода
- FizzBuzz с быстрым выводом
- Свой wc: строки, слова, максимальная длина