我已经读过好几次了,为了调用垃圾收集器并实际清理变量使用的RAM,您必须分配一个新值(例如NULL),而不是简单地取消set()它。
但是,此代码显示,在 NULL 分配后,不会清理为数组$a分配的内存。
function build_array()
{
for ($i=0;$i<10000;$i++){
$a[$i]=$i;
}
$i=null;
return $a;
}
echo '<p>'.memory_get_usage(true);
$a = build_array();
echo '<p>'.memory_get_usage(true);
$a = null;
echo '<p>'.memory_get_usage(true);
我得到的输出是:
262144
1835008
786432
因此,部分内存被清理,但不是全部内存。如何完全清洁内存?
你没有办法用PHP从内存中清除一个变量。
当PHP垃圾收集器看到它应该这样做时,它是由它来做的。
幸运的是,PHP垃圾收集器可能并不完美,但它是PHP的最佳功能之一。如果你按照PHP文档做事,就没有理由出现问题。
如果你有一个现实的场景,它可能是一个问题,在这里发布场景或报告给PHP核心团队。
其他 unset() 是清除变量的最佳方法。
关键是 memory_get_usage(true) 显示分配给 PHP 进程的内存,而不是实际使用的数量。一旦某处需要,系统可以释放未使用的部件。有关memory_get_usage的更多详细信息,请点击此处
如果你用memory_get_usage(false)运行它,你会看到数组实际上是gc'd。