在PHP编码时是否可能创建内存泄漏?
在迭代大循环结构时,我似乎变得非常慢。
我应该取消()我不使用的变量吗?
答案 0 :(得分:4)
PHP没有垃圾收集器(尽管从PHP 5.3开始)。它使用引用计数来管理内存。因此,最常见的内存泄漏源是循环引用和全局变量。
最简单的工具是选择性地将调用放入memory_get_usage并将其缩小到代码泄漏的位置。您还可以使用xdebug创建代码跟踪。
使用执行跟踪和show_mem_delta运行代码。
阅读有关PHP 5.3+中垃圾收集的更多信息,请参阅php.net/manual/de/features.gc.php
PHP 5.3 +
在PHP 5.3+中,有能力在三个主要地方(还有其他地方)执行垃圾收集:
1.当你告诉它时。喜欢使用unset()或mysql_free_result()
2.当您离开某个功能时,清除任何留有范围的变量
3.当脚本结束时 ......非常明显
答案 1 :(得分:0)
如果PHP本身没有错误,那么内存泄漏就不可能在php脚本中发生。
内存清理由PHP garbage collector为您完成。虽然它在大多数情况下都可以很好地工作而无需程序员的任何努力,但它可以使用一组功能进行控制。 Manual
答案 2 :(得分:0)
是的,Php中可能存在内存泄漏, 在O(n)循环中查看是否有内存泄漏的基本方法是查看循环时间是否与对象数成比例,例如100对象比10对象的循环长约10倍。如果100个对象的循环时间更长,则可能存在内存泄漏。
答案 3 :(得分:0)
从php 5.3开始,垃圾收集器可以检测循环引用,参见http://fr2.php.net/gc_enable
您可以使用以下方法强制执行收集周期: http://php.net/manual/fr/function.gc-collect-cycles.php
所有这些功能都有很大的成本,所以请谨慎使用,在大多数情况下让php为你做这件事,这是他的工作:)