meo*_*ouw 5 php garbage-collection circular-reference
如果我使用类似于下面代码的节点树结构,我是否需要担心循环引用?
我已经读过PHP使用内存分配机制,当涉及循环引用时,它可以使垃圾收集器的生活变得非常困难.
我想知道的是:
class Node {
private $parent;
private $children;
function addChild( Node $child ) {
$this->children[] = $child;
$child->setParent( $this );
}
function setParent( $parent ) {
$this->parent = $parent;
}
}
//eg
$node0 = new Node;
$node1 = new Node;
// nodes 1 and 2 have a circular reference to each other
$node0->addChild( $node1 );
Run Code Online (Sandbox Code Playgroud)
逐点:
- 如果我的树仅包含几个节点(例如 25 个),这是否有问题?
除非你的节点是真正的怪物。
- 脚本结束时内存会被释放还是我会慢慢地给服务器带来问题?
当解释器关闭时,所有内存都会被释放。
- 脚本执行过程中什么情况下会出现这个问题?
我怀疑你不会有什么需要担心的,除非你有非常低的内存限制或非常大的动态数据结构。如果您有 25 个不经常创建/释放的节点,则不会出现问题。
- 手动销毁引用可以解决问题吗?我应该始终这样做吗?
我会帮你的。当使用 Propel 将大型数据集加载到数据库中时,我们遇到了很多内存消耗问题,我们跟踪到循环引用未释放。我们的解决方案是调用一个清除所有引用的方法。
| 归档时间: |
|
| 查看次数: |
2573 次 |
| 最近记录: |