为什么这个函数在执行后仍然使用内存?

时间:2017-02-01 03:17:59

标签: php memory memory-leaks

我有这段代码:

$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时会执行数千次执行,并且它会不断积累内存使用量,并且不会释放内存致命错误。

从方法返回后如何强制它释放内存?

1 个答案:

答案 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;