массивы — назначение NULL переменной PHP не очищает память

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

Этот код, однако, показывает, что память, выделенная для массива $ a, не очищается после назначения NULL.

function build_array()
{
for ($i=0;$i<10000;$i++){
$a[$i]=$i;
}
$i=null;
return $a;
}

echo '<p>'.memory_get_usage(true);

$a = build_array();

echo '<p>'.memory_get_usage(true);

$a = null;

echo '<p>'.memory_get_usage(true);

Я получаю вывод:

262144

1835008

786432

Таким образом, часть памяти очищается, но не вся память. Как я могу полностью очистить оперативную память?

1

Решение

Вы не можете точно очистить переменную из памяти с помощью PHP.

Это до сборщика мусора PHP, чтобы сделать это, когда он видит, что он должен.

К счастью, сборщик мусора в PHP может быть не идеальным, но это одна из лучших функций PHP. Если вы делаете что-то в соответствии с документацией PHP, нет причин для проблем.

Если у вас есть реалистичный сценарий, в котором может возникнуть проблема, опубликуйте сценарий здесь или сообщите об этом основной команде PHP.

Другое unset () — лучший способ очистить переменные.

4

Другие решения

Дело в том, что memory_get_usage (true) показывает объем памяти, выделенной вашему PHP-процессу, а не фактически используемое количество. Система может освободить неиспользованную часть, как только она где-то потребуется.
Более подробную информацию о memory_get_usage можно найти там

Если вы запустите это с memory_get_usage (false), вы увидите, что массив на самом деле был gc’d. пример

0

По вопросам рекламы [email protected]