作者rickysu (Ricky)
看板PHP
标题[分享] PHP GC 机制
时间Mon Jun 3 18:52:00 2013
题外话: 搞了好久终於注册好 PTT 了。
======================================
前阵子看到某篇文章提到,要回收物件时,
使用 $obj = null 会马上回收,unset($obj) 则会比较慢。
在解答之前,先来玩个小游戏。
<?php
class test
{
public function __destruct()
{
echo "object of test is dead\n";
}
}
$test = new test();
$test = null;
die("program is end\n");
执行结果
object of test is dead
program is end
很符合结果 $test = null 先执行 GC (destruct) 接着 die output
===================
<?php
class test
{
protected $me;
public function __contruct()
{
$this-> me = $this;
}
public function __destruct()
{
echo "object of test is dead\n";
}
}
$test = new test();
unset($test);
die("program is end\n");
执行结果
program is end
object of test is dead
unset 没有进行 GC,一直到程式结束後,才开始进行 GC。
疑 unset 没有进行 GC ??!!
好玩的事情发生了,难道真的是 unset 是看心情 GC 的??
其实上面的范例即使改成 $test = null; 执行结果也是一样的。
这边就先卖个关子,明天再来解答为什麽会有这个结果,以及该怎麽避免这样的问题。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.130.136.115
1F:→ chaoms:这不能称GC吧?这是PHP直译类别物件的解构方式顺序而已 06/03 21:08
2F:→ xxxzzz:我两种跑出来的结果都跟第一种一样 06/03 23:29