Я несколько раз читал, что для того, чтобы вызвать сборщик мусора и действительно очистить оперативную память, используемую переменной, вам нужно назначить новое значение (например, 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
Таким образом, часть памяти очищается, но не вся память. Как я могу полностью очистить оперативную память?
Вы не можете точно очистить переменную из памяти с помощью PHP.
Это до сборщика мусора PHP, чтобы сделать это, когда он видит, что он должен.
К счастью, сборщик мусора в PHP может быть не идеальным, но это одна из лучших функций PHP. Если вы делаете что-то в соответствии с документацией PHP, нет причин для проблем.
Если у вас есть реалистичный сценарий, в котором может возникнуть проблема, опубликуйте сценарий здесь или сообщите об этом основной команде PHP.
Другое unset () — лучший способ очистить переменные.
Дело в том, что memory_get_usage (true) показывает объем памяти, выделенной вашему PHP-процессу, а не фактически используемое количество. Система может освободить неиспользованную часть, как только она где-то потребуется.
Более подробную информацию о memory_get_usage можно найти там
Если вы запустите это с memory_get_usage (false), вы увидите, что массив на самом деле был gc’d. пример