TGViewer
Библиотека собеса по PHP | вопросы с собеседований Библиотека собеса по PHP | вопросы с собеседований @php_interview_lib · 3.1K subscribers
Post #1191 1.09K
Как работает сборщик мусора?

PHP использует два механизма управления памятью: счётчик ссылок (refcount) и циклический сборщик мусора (GC).

Каждая переменная хранит zval с refcount — счётчиком, сколько переменных ссылаются на это значение. Когда refcount падает до 0, память освобождается немедленно.

Проблема возникает при цикличных ссылках:
php$a = [];
$a[] = &$a; // $a ссылается сама на себя
unset($a); // refcount стал 1, а не 0 — утечка


После unset refcount не обнуляется, потому что объект ссылается на самого себя. Простой счётчик это не поймает.

Для таких случаев PHP (с версии 5.3) имеет cyclic garbage collector. Он периодически запускается (или при достижении порога ~10 000 потенциальных "мусорных" zval'ов) и обходит граф ссылок, выявляя изолированные циклы.

Управление вручную:

gc_collect_cycles(); // принудительный запуск
gc_disable(); // отключить, если GC мешает производительности
gc_enable();
gc_status(); // статистика


На практике — актуально в долгоживущих процессах (Swoole, RoadRunner, воркеры), где объекты с взаимными ссылками (например, parent/children в дереве) могут постепенно съедать память. Решение — либо weak references (WeakReference::create($obj)), либо явная очистка связей перед unset.
  • 👍 4
  • ❤ 1
  • 🔥 1
More from @php_interview_lib
  1. Sep 15, 2026❓ Расскажите о паттерне Bridge Bridge — это структурный паттерн, который разделяет абстрак…
  2. Sep 15, 2026😭 Как не потратить недельный лимит AI-кодинга за три дня? Разберём на вебинаре, как трати…
  3. Aug 4, 2026Какова разница между «cookie» и «session»? В PHP «cookie» и «session» — это механизмы упра…
  4. Aug 4, 2026👅 Самое сложное — выбрать не курс, а направление Сегодня хочется разобраться в AI-агентах…
  5. Aug 4, 2026Один доступ вместо вечного выбора между «нужно для работы» и «давно хотелось изучить» 👇
  6. Jul 31, 2026❓ Объясни разницу между Gate и Policy в Laravel? Оба инструмента для авторизации, но с раз…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →