猿问

在用PHP释放内存方面有什么更好的:unset()或$var=null

在用PHP释放内存方面有什么更好的:unset()或$var=null

我意识到第二种方法避免了函数调用的开销(更新,实际上是一种语言结构),但是知道其中一种是否比另一种更好是很有趣的。我一直在用unset()在我的大部分编码中,但是最近我已经浏览了一些在网络上找到的、值得尊敬的类,这些类使用$var = null相反。

是否有更好的选择,原因是什么?



摇曳的蔷薇
浏览 820回答 3
3回答

白猪掌柜的

这是在2009年未设置手册页:unset()做它的名字说的-取消一个变量。它不强制立即释放内存。PHP的垃圾收集器会在它认为合适的时候完成它,因为这些CPU周期无论如何都不需要,或者是在脚本耗尽内存之前,不管首先发生什么。如果你在做$whatever = null;然后重写变量的数据。您可能会更快地释放/缩小内存,但它可能会更快地从真正需要它们的代码中窃取CPU周期,从而导致更长的总体执行时间。(自2013年以来,unset手册页不要再包括那部分了)请注意,直到php5.3,如果您有循环引用中的两个对象,例如在父-子关系中,对父对象调用unset()将不会释放用于子对象中父引用的内存。(当父对象被垃圾收集时,内存也不会被释放。)虫33595)问题“未设置与=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()相对应:更新符号表条目似乎比删除它更快。当您尝试使用不存在的unset)变量,则会触发错误,变量表达式的值将为NULL。(因为,PHP还应该做什么呢?每个表达式都需要得到一些值。)一个赋值为空的变量仍然是一个完全正常的变量。

守着一只汪

unset实际上不是一个函数,而是一个语言结构..它不是一个函数调用,而是一个return或者include.除了性能问题之外,使用unset使你的代码意图更清楚了。

智慧大石

通过对变量执行unset()操作,您实际上已经将变量标记为“垃圾收集”(PHP实际上没有一个,但例如),因此内存无法立即可用。变量不再容纳数据,但堆栈保持较大的大小。执行NULL方法会立即删除数据并缩小堆栈内存。这是来自个人的经验,也来自其他人。参见unset()函数的注释这里.我个人在循环中的迭代之间使用unset(),这样我就不必延迟堆栈的大小了。数据消失了,但足迹依然存在。在下一次迭代中,内存已经被php占用,因此更快地初始化了下一个变量。
随时随地看视频慕课网APP
我要回答