为什么我的代码中没有激活垃圾收集?

时间:2011-11-20 10:52:24

标签: php memory memory-leaks

我的代码中有一个foreach语句,每次迭代都会计算大量数据并进入下一次迭代。我运行此代码,但是当我读取日志时,我发现存在内存泄漏错误。

PHP.net说当发生这种情况时,使用gc_enabled()是处理此问题的好方法。

我已将这些行添加到foreach块的最后一行:

echo "Check GC enabled : " . gc_enabled();
echo "Number of affected cycles : " . gc_collect_cycles();

这是输出:

Check GC enabled : 1
Number of affected cycles : 0

为什么存在周期,但受影响的周期为0?

1 个答案:

答案 0 :(得分:3)

你有可能没有看到“内存泄漏错误”,你不只是看到那些。你看到的可能是允许的内存耗尽错误,这意味着你的脚本超过了php.ini中定义的允许的最大内存限制。要更改限制,请查看core php.ini directives的手册页。您会在资源限制下找到memory_limit

对于gc_collect_cycles(),函数仍为undocumented,这是一个不使用它的好提示。你读的内容可能是theory behind collecting cycles in PHP。该函数报告的是没有收集任何循环,这可能意味着首先没有内存泄漏错误消息。

我建议你避免在PHP中进行垃圾收集,直到它得到适当的文档记录并了解所涉及的基础知识。