如何在PHP中释放内存?

9
public function foo($file1, $file2){
  $obj = new Obj();

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

  return $data;
}

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

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


在PHP中有垃圾回收器。https://dev59.com/L3I-5IYBdhLWcg3wq6Zo - stecb
3个回答

3
通过在变量上使用unset(),您已经将其标记为“垃圾收集”,实际上PHP并没有真正的垃圾收集器,因此内存不会立即可用。变量不再包含数据,但堆栈仍然保持当前大小,即使调用了unset()。将变量设置为NULL会立即删除数据并缩小堆栈内存。

在一些内存耗尽警告被抛出之前,对于我来说这种方法已经行之有效,当时通过nullifying变量后再调用unset()。虽然nullification后使用unset可能是不必要的,但我还是这么做了。


1
PHP有一个垃圾回收器。您可以使用gc_enable()启用它,然后使用gc_collect_cycles()进行垃圾回收。 - ILikeTacos

2

PHP使用垃圾回收器。它会释放所有没有引用的变量。假设$obj->importAFile()没有返回对$obj的引用,那么内存将被释放。然而,不能保证内存何时被释放。如果$obj包含对自身的引用,在旧版本的PHP中也不会释放内存。您可以在PHP文档中了解更多信息。


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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接