【问题标题】:How to free memory in PHP?如何在 PHP 中释放内存?
【发布时间】:2011-11-03 14:19:41
【问题描述】:
public function foo($file1, $file2){
  $obj = new Obj();

  $data = array();
  $data[] = $obj->importAFile($file1);
  $data[] = $obj->importAFile($file2);

  return $data;
}

分配给 $obj 的内存在返回后是否被释放?

如果没有,我该如何释放它?

【问题讨论】:

标签: php memory object


【解决方案1】:

通过在变量上使用 unset(),你已经将它标记为“垃圾收集”,因为 PHP 并没有真正的,所以内存不是立即可用的。该变量不再包含数据,但即使在调用 unset() 之后堆栈仍保持当前大小。将变量设置为 NULL 会丢弃数据并几乎立即收缩堆栈内存。

这对我来说已经有好几次了,在调整之前抛出内存耗尽警告,然后在使变量无效后调用 unset()。取消后调用 unset 可能没有必要,但我仍然在取消后使用它。

【讨论】:

  • PHP 有一个垃圾收集器。您可以使用gc_enable() 启用它,然后使用gc_collect_cycles()
【解决方案2】:

PHP 使用垃圾收集器。它释放所有没有引用的变量。假设 $obj->importAFile() 没有返回对 $obj 的引用,内存将被释放。但是,不能保证何时释放内存。如果 $obj 包含对自身的引用,那么在旧版本的 PHP 中,内存也不会被释放。你可以在PHP documentation阅读更多内容

【讨论】:

    【解决方案3】:

    它为您管理内存。只有当你的对象之间存在一些循环引用时,你可能会遇到问题

    【讨论】:

      猜你喜欢
      • 2017-09-08
      • 1970-01-01
      • 2016-03-13
      • 2010-12-06
      • 2011-12-08
      • 2012-01-18
      • 2023-04-05
      • 2011-01-31
      相关资源
      最近更新 更多