将 NULL 分配给 PHP 变量不会清理内存


Assigning NULL to a PHP variable doesn't clean the memory

我已经读过好几次了,为了调用垃圾收集器并实际清理变量使用的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。