我有这段代码:
$worked = null;
unset($worked);
$mem = memory_get_usage();
$worked = $worker -> work($a, $b);
print_r($worked);
echo 'MEM: '.(memory_get_usage() - $mem), PHP_EOL;
$a
和$b
都不会通过引用传递。
哪个输出:
Array
(
[aa] => Array
(
[11] => 0
[22] => 0
[33] => 18
)
[bb] => Array
(
[11] => 0
[22] => 0
[33] => 18
)
[cc] => Array
(
[11] => 0
[22] => 0
[33] => 81
)
[dd] => Array
(
[11] => 0
[22] => 0
[33] => 81
)
)
MEM: 222288
变量$worked
只是一个小数组,根本不应占用 222KB 。似乎执行$worker -> work()
方法所使用的内存没有被释放?
为什么呢?我以为从函数返回会破坏内部的一切吗?
以上代码处于一个循环中,每次运行PHP时会执行数千次执行,并且它会不断积累内存使用量,并且不会释放内存致命错误。
从方法返回后如何强制它释放内存?
答案 0 :(得分:0)
证明内存堆积不是由您的代码完成的。 试试这样,请报告结果:
$worked = null;
$worked = $worker -> work($a, $b);
$mem = memory_get_usage();
print_r($worked);
unset($worked);
echo 'MEM 1: '.$mem, PHP_EOL;
echo 'MEM 2: '.memory_get_usage(), PHP_EOL;