Ce face gc_collect_cycles
PHP eliberează memoria unui obiect când nu mai există nicio variabilă care să arate spre el. Două obiecte care arată unul spre celălalt (o referință circulară) nu ajung niciodată la zero și rămân în memorie. Colectorul de gunoi (garbage collector) le găsește periodic și le eliberează.
Colectorul pornește singur când se adună destui candidați (implicit în jur de 10.000). gc_collect_cycles îl pornește imediat; este util în scripturi care rulează mult timp, de exemplu importuri mari.
Ce returnează
Numărul de valori eliberate.
Exemple
Exemplul 1: Eliberarea unor referințe circulare
Fiecare pereche are două obiecte care se referă unul la altul, deci trei perechi înseamnă șase valori eliberate.
<?php
class Nod
{
public ?Nod $vecin = null;
}
for ($i = 0; $i < 3; $i++) {
$a = new Nod();
$b = new Nod();
$a->vecin = $b;
$b->vecin = $a;
}
unset($a, $b);
echo "Valori eliberate: " . gc_collect_cycles();
Rezultat
Valori eliberate: 6
Greșeli frecvente
- Apelezi
gc_collect_cyclesdupă fiecare linie ca să „economisești memorie”. Colectorul are un cost; apelează-l rar, de exemplu o dată la câteva mii de elemente procesate.
Comenzi înrudite
gc_enable: Pornește colectorul de referințe circulare (dacă a fost oprit).gc_status: Returnează statistici despre colectorul de referințe circulare: de câte ori a rulat, câte valori a eliberat etc.gc_mem_caches: Eliberează memoria păstrată în rezervă de managerul de memorie al PHP și returnează câți octeți a eliberat.