2011-08-25 36 views
9
public function foo($file1, $file2){ 
    $obj = new Obj(); 

    $data = array(); 
    $data[] = $obj->importAFile($file1); 
    $data[] = $obj->importAFile($file2); 

    return $data; 
} 

La memoria allocata per $ obj viene liberata dopo il ritorno?Come liberare memoria in PHP?

Se no come posso liberarlo?

+0

In PHP c'è il garbage collector http://stackoverflow.com/questions/1735492/is-there-garbage-collection-in-php – stecb

risposta

2

PHP utilizza il collettore di garbacce. Libera tutte le variabili a cui non sono rimasti riferimenti. Supponendo che $ obj-> importAFile() non restituisca il riferimento a $ obj, la memoria verrà liberata. Tuttavia, non vi è alcuna garanzia quando la memoria verrà liberata. Se $ obj contiene un riferimento a se stesso, nelle versioni precedenti di PHP la memoria non verrà liberata. Puoi leggere di più in PHP documentation

0

Gestisce la memoria per te. Potresti avere un problema solo quando ci sono alcuni riferimenti circolari tra i tuoi oggetti

2

Utilizzando unset() su una variabile, lo hai contrassegnato per "garbage collection" letteralmente, poiché PHP non ne ha davvero uno, quindi la memoria non è immediatamente disponibile. La variabile non contiene più i dati, ma lo stack rimane alla dimensione corrente anche dopo aver chiamato unset(). L'impostazione della variabile su NULL elimina i dati e riduce la memoria dello stack quasi immediatamente.

Questo ha funzionato per me in diverse occasioni in cui gli avvisi esauriti della memoria venivano lanciati prima della messa a punto, quindi chiamando unset() dopo aver annullato la variabile. Chiamare disinserito dopo l'annullamento potrebbe non essere necessario ma l'ho comunque usato dopo l'annullamento.

+1

PHP ha un garbage collector. Lo abiliti con 'gc_enable()' e poi 'gc_collect_cycles()' – ILikeTacos

Problemi correlati