Алгоритмы
- Reference Counting — счётчик ссылок на объект. При 0 — объект удаляется. PHP, CPython. Проблема: циклические ссылки
- Mark and Sweep — обходит граф объектов, помечает достижимые, удаляет непомеченные. Java, Go, JavaScript
- Generational GC — молодые объекты (короткоживущие) собираются чаще старых. JVM, .NET, V8
PHP и GC
PHP использует reference counting + cyclic garbage collector. Циклические ссылки (A → B → A) не освобождаются reference counting — их убирает cyclic GC. gc_collect_cycles() — ручной запуск.
Влияние на производительность
GC-паузы могут влиять на latency. В Go GC concurrent — паузы < 1 мс. В старых JVM GC-паузы были секундами.