Сборщик мусора - автоматическое управление памятью, которое ищет объекты, на которые больше нет ссылок и освобождает занимаемую ими память. Работает фоново, может приостанавливать выполнение программы (stop-the-world).
Подсчет ссылок (Reference Counting) - механизм управления памятью, при котором каждый объект отслеживает количество ссылок на себя. Когда счетчик достигает нуля, память объекта освобождается.
Основные отличия:
| Критерий | Подсчет ссылок (ARC/MRC) | Сборщик мусора |
|---|---|---|
| Принцип работы | Отслеживание количества ссылок на каждый объект | Поиск недостижимых объектов из корневых объектов |
| Время работы | В момент изменения количества ссылок | Периодически, фоново или при нехватке памяти |
| Циклические ссылки | Возникают проблемы (Retain Cycles) | Может обрабатывать (зависит от алгоритма) |
| Предсказуемость | Более предсказуемо, детерминировано | Менее предсказуемо |
| Производительность | Накладные расходы при каждой ссылочной операции | Накладные расходы при работе сборщика, возможны паузы |
| Реализации | Ручная (MRC), Автоматическая (ARC) | Различные алгоритмы (Mark and sweep, Generational etc.) |
В iOS используется автоматический подсчет ссылок (ARC). Ручной подсчет ссылок (MRC) устарел. Google Chrome использует сборщик мусора V8.