为什么unset()不释放内存?

时间:2016-08-13 16:34:32

标签: php

我认为这是我的第一篇文章,我不确定。

我有三个文件:queue.class.php,node.class.php和test.php,如下所示:

queue.class.php:

<?php

include('node.class.php');

class queue
{
    public $head;
    public $tail;
    private $size;

    //some methods (e.g __construct)

    public function create_node($value){
        $data = new Node($value);
        return $data;
    }

    public function push($value){
        //here I call create_node
    }

    //some more methods..

    public function __destruct(){
        if(!$this->queue_is_empty())
        {
            $node = $this->head->next;
            while(!empty($node))
            {
                unset($this->head) // Here, doesn't free the memory.
                $this->head = $node;
                $node = $this->head->next;
            }
            unset($node);
        }
        unset($this->head, $this->tail, $this->size);
    }
}

?>

node.class.php:

<?php

class Node
{
    public $next;
    public $previous;
    private $data;

    //some methods..

    public function __destruct(){
        unset($this->next, $this->previous, $this->data);
    }

}

?>

test.php 中,我有以下内容:

<?php

include('queue.class.php');

$cola = new queue();

for($i = 0; $i < 1000; $i++){
    $cola->push($i);
}

unset($cola) //free all the memory;

?>

我怀疑的是下一个:为什么当我在&#34; {&#34;}内呼叫unset(node)__destruct(在queue.class.php中)是否释放节点占用的内存?但是如果我在node.class.php中创建一个新方法,请调用它,例如:delete_node()(使用与__destruct相同的代码)并将每个unset(node)替换为:node->delete_node()在queue.class.php中,是的,它可以工作。

我看过类似的主题,但我完全不了解

我希望理解我的解释,任何人都可以帮助我。感谢

PD:我是新人,我不知道怎么做降价

0 个答案:

没有答案