Как освободить память в PHP? - PullRequest
       4

Как освободить память в PHP?

9 голосов
/ 25 августа 2011
public function foo($file1, $file2){
  $obj = new Obj();

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

  return $data;
}

Освобождается ли память, выделенная для $ obj после возврата?

Если нет, как я могу освободить ее?

Ответы [ 3 ]

2 голосов
/ 14 апреля 2012

Используя unset () для переменной, вы буквально пометили ее как «сборщик мусора», так как PHP на самом деле ее не имеет, поэтому память не сразу доступна.Переменная больше не хранит данные, но стек остается в текущем размере даже после вызова unset ().Установка переменной в NULL сбрасывает данные и почти сразу сокращает объем стека.

Это сработало для меня несколько раз, когда предупреждения об исчерпании памяти генерировались до настройки, а затем вызывали unset () после обнуления переменной.Вызов unset после обнуления может не понадобиться, но я все же использовал его после обнуления.

2 голосов
/ 25 августа 2011

PHP использует сборщик мусора.Это освобождает все переменные, на которые не осталось ссылок.Предполагая, что $ obj-> importAFile () не возвращает ссылку на $ obj, память будет освобождена.Тем не менее, нет никакой гарантии, когда память будет освобождена.Если $ obj содержит ссылку на себя, в старых версиях PHP память также не будет освобождена.Вы можете прочитать больше в PHP документации

0 голосов
/ 25 августа 2011

Он управляет памятью для вас.У вас может быть проблема только тогда, когда между вашими объектами существуют циклические ссылки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...