【发布时间】:2013-01-31 12:33:31
【问题描述】:
在 PHP 中有没有一种方法可以找出对象被引用的位置,以便找到不再需要的过时引用?
一些背景:
我正在调试/优化一个用 PHP 编写的大型系统,试图在运行一些大型批处理作业时减少系统的内存占用。
流程基本上是:
1) 设置所有处理所需的一些上下文/对象
2) 对仅与 #1 中设置的对象相关的对象进行 N 次迭代操作,在循环中创建的各个对象之间没有关系/耦合
如果 N 足够大,系统总是会耗尽内存,即使在步骤 #2 中创建的每个对象都应该能够在对该特定对象完成处理后进行垃圾回收。
在第 2 步的每次迭代结束时,我将执行以下操作:
debug_zval_dump($lObj); echo gc_collect_cycles();
因此,我看到了以下结果:
debug_zval_dump:引用计数(3) gc_collect_cycles: 0
以上内容让我假设由于某种原因,系统中某处保存了一些对对象的过时引用,但我无法仅通过检查代码来找到它们。
非常感谢任何帮助!
【问题讨论】:
-
什么?阅读帖子的正文,我完全不知道您要做什么(除非您达到了内存限制)。你能发布一些代码吗?不,没有办法找出引用的位置......
-
ircmaxell:本质上,我只是想找到一种方法来确定何时创建了对对象的新引用,以便我可以在代码中找到引用的位置。类似于对对象的回调,我可以从中运行 debug_backtrace 并手动检查对对象进行引用的位置。
标签: php reference garbage-collection