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

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

    return $data; 
} 

¿Se libera la memoria asignada para $ obj después de la devolución?¿Cómo liberar memoria en PHP?

Si no, ¿cómo puedo liberarlo?

+0

En PHP hay recolector de basura http://stackoverflow.com/questions/1735492/is-there-garbage-collection-in-php – stecb

Respuesta

2

PHP utiliza colector de garbace. Libera todas las variables a las que no quedan referencias. Suponiendo que $ obj-> importAFile() no devuelve referencia a $ obj, la memoria se liberará. Sin embargo, no hay garantía cuando la memoria será liberada. Si $ obj contiene referencia a sí mismo, en las versiones anteriores de PHP, la memoria no se liberará también. Puede leer más en PHP documentation

0

Administra la memoria para usted. Puede tener un problema solo cuando hay algunas referencias circulares entre sus objetos

2

Al usar unset() en una variable, lo ha marcado literalmente para 'recolección de basura', ya que PHP realmente no tiene una, entonces la memoria no está disponible de inmediato. La variable ya no alberga los datos, pero la pila permanece en el tamaño actual incluso después de llamar a unset(). Al establecer la variable en NULL, se eliminan los datos y se reduce la memoria de la pila casi de inmediato.

Esto me ha funcionado en varias ocasiones cuando se lanzaron advertencias de memoria agotada antes de la sintonización, y luego se llamó a unset() después de anular la variable. Llamar a unset después de anular podría no ser necesario, pero lo utilicé después de la anulación.

+1

PHP tiene un recolector de basura. Lo habilita con 'gc_enable()' y luego 'gc_collect_cycles()' – ILikeTacos

Cuestiones relacionadas