В PHP 7.4 я заметил количество собранных циклов, возвращаемое gc_collect_cycles всегда равен нулю, если в циклическом объекте, на который ссылаются, есть метод destructor
.
class A {
public function __destruct() {
}
}
gc_disable();
$a1 = new A;
$a2 = new A;
$a1->ref = $a2;
$a2->ref = $a1;
$a1 = $a2 = NULL;
echo('removed cycles: '.gc_collect_cycles()); // Output: removed cycles: 0
Когда я удаляю метод __destruct
, вывод:
removed cycles: 2
Вы можете видеть, что это поведение началось с PHP 7.4.0beta4.
Что здесь происходит? Собираются ли циклы мусора в деструкторе, даже если GC отключен?