您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

使用PHP释放内存的更好方法是:unset()或$ var = null

使用PHP释放内存的更好方法是:unset()或$ var = null

在2009年未设置的手册页中提到过:

unset()确实按照其名称所说-取消设置变量。它不会强制立即释放内存。PHP垃圾收集器将在其认为合适的情况下进行此操作- 出于故意,因为无论如何都不需要这些cpu周期,或者直到脚本耗尽内存之前(无论哪种情况先发生)。

如果这样做,$whatever = null;则将重写变量的数据。您可能会更快地释放/缩小内存,但可能会从真正需要它们的代码中窃取cpu周期,从而导致更长的总体执行时间。

(自2013年以来,该unset手册页不再包含该部分)

请注意,直到PHP5.3为止,如果您有两个循环引用的对象(例如,父子关系),则在父对象上调用unset()不会释放子对象中用于父引用的内存。(当父对象被垃圾回收时,也不会释放内存。)bug33595

问题“ unset和= null之间的差异”详细说明了一些差异:

unset($a)$a从符号表中删除;例如:

$a = str_repeat('hello world ', 100);
unset($a);
var_dump($a);

输出

Notice: Undefined variable: a in xxx
NULL

但是何时$a = null使用:

$a = str_repeat('hello world ', 100);
$a = null;
var_dump($a);
Outputs:

NULL

似乎这$a = null比它的unset()对应对象要快一些:更新符号表条目似乎比删除它快。

php 2022/1/1 18:19:16 有657人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶