【发布时间】:2011-06-17 02:22:24
【问题描述】:
所以我正在使用 php 5.2 并且需要一些垃圾收集,因为我正在处理非常有限的资源和大型数据集。
从我的测试中,我看到 unset 在脚本结束之前什么都不做(即使我内存不足),这似乎与文档有点相反,尽管我假设我也在阅读 5.3 文档不是 5.2 文档,而且 5.3 文档似乎相对没有文档。
我的班级的准系统示例如下:
class foo{
private $_var;
public function __construct(){
$this->_var = array();
for($i = 0; $i < 10000000000; $i++){
$this->_var[rand(1, 100000)] = 'I am string '.$i.' in the array';
}
}
public function myGC(){
$this->_var = null;
}
}
在我的函数“myGC()”中,我应该对数组进行 foreach 并将遇到的每个元素设置为 NULL(就像我记得在 C++ 中所做的那样)还是设置 $this->_var = NULL 不仅释放指针到数组以及与指针关联的所有元素?
【问题讨论】:
-
你如何测试你的内存使用情况?通常只需取消引用分配的值即可。您应该记住,gc 仅在间隔中调用。
-
我在 var 初始化之前设置了一个 memory_get_usage(),在它被销毁以考虑使用内存的其他 var 之前,然后在它被取消设置之后。内存在我跟踪的每次迭代中不断增长,在未设置匹配之前和之后,直到我触发内存不足错误,然后脚本执行突然停止。我应该在我的 destruct 方法中添加一个 echo 来验证 destruct 是否被调用过。(我很确定它从来没有被调用过,至少我的内存日志让我相信)
标签: php arrays memory garbage-collection