PHP内存分配和释放

时间:2013-07-23 17:14:36

标签: php memory php-5.4

所以,我正在运行一个长时间运行的脚本来处理内存敏感数据(大量的)。我(想)我在长时间运行的过程中正确地破坏了大型物体,以节省内存。

我有一个连续输出当前内存使用情况的日志(使用memory_get_usage()),我没有注意到内存使用量的上升和下降(重要的)。这告诉我,我可能正在做内存管理的正确事情。

但是,如果我登录到服务器并运行top命令,我会注意到处理此脚本的apache进程从不释放内存(至少通过top命令可见)。它只是保持最高的内存使用率,即使php报告的当前内存使用量要低很多。

所以,我的问题是:如果内存实际上没有被释放回服务器,我是否试图节省内存是徒劳的?或者我在这里遗漏了一些东西。

谢谢。

PS。在linux上使用php 5.4

PPS。对于那些想要代码的人来说,这是一个基本的表示:

function bigData()
{
    $obj = new BigDataObj();
    $obj->loadALotOfData();

    $varA = $obj->getALotOfData();

    //all done
    $obj = NULL;
    $varA = NULL;
    unset($obj,$varA);
}

更新:正如hek2mgl推荐的那样,我运行了debug_zval_dump(),输出对我来说似乎是正确的。

function bigData()
{
    $obj = new BigDataObj();
    $obj->loadALotOfData();

    //all done
    $obj = NULL;

    debug_zval_dump($obj);

    unset($obj);

    debug_zval_dump($obj);
}

输出:

NULL refcount(2)

NULL refcount(1)

1 个答案:

答案 0 :(得分:2)

PHP有垃圾收集器。它将为引用计数设置为0的变量容器释放内存,这意味着不再存在用户空间引用。

我想还有一些你可能认为已经清理过的变量的引用。需要查看代码以显示问题所在。