代码之家  ›  专栏  ›  技术社区  ›  Josh K

PHP内存问题(5)

  •  0
  • Josh K  · 技术社区  · 14 年前

    打电话吗 unset()

    6 回复  |  直到 14 年前
        1
  •  7
  •   Sarfraz    14 年前

    调用unset()是否释放内存 和那个物体有关?

    检查你自己使用 memory_get_usage() :

    echo memory_get_usage() . "<br />";
    unset($array['key']);
    unset($array['key2']);
    unset($array['key3']);
    echo memory_get_usage();
    

    更多资源:

    PHP在

    1. 当你告诉他
    2. 当你离开一个函数
    3. 当脚本结束时

    当你使用 取消设置() 在你离开后 资源隐式-任何变量 最后,情况3释放了所有 隐式编写相关资源的脚本。

        2
  •  4
  •   sleepynate    14 年前

    unset() 在php中“释放”内存,但它让垃圾收集器决定何时实际释放所述内存。因此,在需要或方便的基础上释放内存(在PHP耗尽可用内存之前)。

    一个主要的警告是要注意你没有试图 局部范围内的全局变量。即使是通过引用传入的变量也只有它们的局部引用 unset 在函数的区域设置中执行时。为了让记忆真正可用

        3
  •  2
  •   Daniel Egeberg    14 年前

    它不会立即释放内存,但它允许垃圾收集器这样做。

        4
  •  2
  •   Paul Dragoonis    14 年前

    通过取消设置变量,您将其“refcount”设置为0。这允许Zend引擎在内存中移动内容,并且它知道它可以覆盖内存中的变量区域,因为它的refcount为0。

        5
  •  2
  •   Artefacto    14 年前

    不,它不一定免费。它只是减少了引用计数。

    例子:

    //object has reference count 1 because it has one variable referencing 1
    $a = new BigObject;
    //object still has reference count 2, but no new object was allocated in memory
    $b = $a;
    //object has reference count 1
    unset($a);
    //the object is still in memory
    

    unset .

        6
  •  1
  •   Mark Baker    14 年前

    在PHP中>第5.3.0节 gc_collect_cycles()