Алгоритми
- 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-паузи були секундами.