Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про PHP: garbage, collector

Как работает сборщик мусора на основе подсчёта ссылок?

Этот вопрос проверяет понимание того, как PHP освобождает память и что происходит при циклических ссылках.

Короткий ответ

PHP использует подсчёт ссылок: каждое значение хранит число переменных, которые на него указывают. Когда счётчик становится равен нулю, память освобождается. Однако подсчёт ссылок не способен автоматически находить циклические ссылки, поэтому в PHP есть дополнительный механизм GC, который периодически сканирует память и удаляет "циклы". GC работает не постоянно, а запускается по определённым порогам, чтобы не тормозить выполнение.

Длинный ответ

Как работает Garbage Collector в PHP

PHP применяет два механизма: подсчёт ссылок и сборщик циклических ссылок.

1. Подсчёт ссылок

Определение: Reference counting — это метод управления памятью, при котором каждое значение хранит число ссылок на себя.

Когда переменная создаётся — счётчик становится равен 1.
Когда переменная копируется — счётчик увеличивается.
Когда переменная удаляется (unset, выход из области видимости) — счётчик уменьшается.
Когда он достигает 0 — память освобождается.

2. Проблема циклических ссылок

Пример:

php

$a = new StdClass();
$b = new StdClass();

$a->ref = $b;
$b->ref = $a;

Даже если обе переменные удалить, refcount не станет 0 — объекты ссылаются друг на друга.

3. Механизм GC

PHP имеет встроенный сборщик циклических ссылок, который:

  • периодически (по threshold) сканирует "root buffer"

  • ищет циклы

  • уничтожает значения, которые нельзя освободить обычным путём

4. Стоимость GC

GC — дорогая операция, поэтому он запускается не всегда, а только при накоплении потенциальных циклических структур.

5. Вывод

Сборщик мусора делает PHP безопасным для работы с объектами и сложными структурами данных. Однако важно помнить, что циклы создают нагрузку, и их стоит избегать, когда это возможно.

  • Аватар

    PHP Guru

    Mikhail Savin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    4

  • Сложность:

    5

Навыки

  • PHP

    PHP

Ключевые слова

#garbage

#collector

Подпишись на PHP Developer в телеграм

  • Аватар

    PHP Guru

    Mikhail Savin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.