【问题标题】:Assigning NULL to a PHP variable doesn't clean the memory将 NULL 分配给 PHP 变量不会清理内存
【发布时间】:2016-03-09 15:43:28
【问题描述】:

我已经读过好几遍了,为了调用垃圾收集器并真正清理变量使用的 RAM,你必须分配一个新值(例如 NULL)而不是简单地 unset() 它。

然而,这段代码显示分配给数组 $a 的内存在分配 NULL 后没有被清理。

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

所以部分内存被清理了,但不是所有的内存。如何彻底清理 RAM?

【问题讨论】:

标签: php arrays variables null ram


【解决方案1】:

您无法使用 PHP 从内存中明确清除变量。

当 PHP 垃圾收集器认为应该这样做时,由它来执行此操作。

幸运的是,PHP 垃圾收集器可能并不完美,但它是 PHP 的最佳特性之一。如果您按照 PHP 文档执行操作,则没有理由出现问题。

如果您有一个可能存在问题的现实场景,请在此处发布该场景或将其报告给 PHP 核心团队。

其他 unset() 是清除 vars 的最佳方法。

【讨论】:

  • 谢谢,所以基本上分配一个值来清理正在使用的内存,正如我多次阅读的那样(例如这里v1.srcnix.com/2010/02/10/…)是不正确的?
【解决方案2】:

重点是 memory_get_usage(true) 显示分配给您的 PHP 进程的内存,而不是实际使用的数量。一旦某处需要,系统可以释放未使用的部分。 有关 memory_get_usage 的更多详细信息可以找到there

如果你用 memory_get_usage(false) 运行它,你会看到这个数组实际上是 gc'd。 example

【讨论】:

  • 是的,但最终分配的内存是我猜想在 PHP 中避免最大内存分配错误时的重要值。
猜你喜欢
  • 1970-01-01
  • 2023-03-26
  • 1970-01-01
  • 2017-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多