Originariamente inviato da OhMyGod
dove avete trovato le informazioni sulla garbage collection di PHP? facendo una ricerca un po' veloce ho trovato soltanto informazioni sulla garbage collection delle sessioni, e alcuni blog e forum che parlavano della garbage collection condendola con "penso", "correggetemi se sbaglio" e cose simili, quindi tutto molto incerto. ma niente di ufficiale. fatemi sapere.
ma come, hai fatto un discorso tipo "l'unico che potenzia veramente il codice php" e non sai che ogni linguaggio di scripting è stranoto nonchè scontato che abbia un gestore automatizzato della memoria ?

in questo specifico caso il fatto che faccia unset dell'istanza, eliminando il riferimento e non esistendo più quindi alcun modo di accedere alle informazioni in esse precedentemente contenute, e non si liberi la memoria è proprio un problema del garbage collector "pigro".

Il distruttore di PHP 5 non è che l'hanno creato perchè tutti li dentro devono scrivere unset di ogni variabile dell'istanza ... questo potevano automatizzarlo in core tranquillamente ... serve ad assicurarsi che prima che questa venga eliminata le operazioni li presenti vengano compiute.

Se tu per maggiore sicurezza vuoi tentare di forzare il garbage sfruttando unset sei libero di farlo ma non pensare di aver creato chissà quale codice migliore scrivendo unset da tutte le parti ... anzi, hai solo aumentato il tempo di esecuzione, seppur di pochissimo, grazie al sovraccarico dato dalle numerose chiamate di funzione, che sia print o unset ... cambia poco (e print lo sconsigliano proprio perchè funzione e quindi più lento di echo .. per dirne una .. ed addirittura si dice che unset in PHP4 non serva assolutamente a niente .. per dirne un'altra)

Per concludere, il modo più rapido, veloce ed indolore per deallocare le informazioni è ricreare a valore vuoto la stessa variabile, senza sprecare inutili chiamate di funzione o se proprio necessario dopo aver usato unset.


$array_kilometrico = array(mille mila ....);

// non serve più
$array_kilometrico = array();

meglio di unset($array_kilometrico)

ed il bug delle sessioni era proprio basato sul fatto che la pigrizia del garbage, riferito alle sezioni, non era in grado di svuotarle veramente del tutto alla chiamata unset($_SESSION) ... mentre $_SESSION = array(); assicurava una migliore efficienza sulla pulizia.



Comunque sia, questo è un post del 2002:
http://www.zend.com/lists/php-dev/200205/msg00622.html
Zeev Suraski
If you're adding elements to a hash you created using array_init(), and
you're using the standard macros (which apparently you are) - then yes, the
engine will take care of garbage collection for you.
giusto per dire che l'engine ha una sua garbage ... e gestisce la memoria in auomatico