顯示廣告
隱藏 ✕
※ 本文為 dinos 轉寄自 ptt.cc 更新時間: 2013-06-03 19:03:24
看板 PHP
作者 rickysu (Ricky)
標題 [分享] 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

--
※ 同主題文章:
※ 看板: dinos 文章推薦值: 0 目前人氣: 0 累積人氣: 87 
作者 rickysu 的最新發文:
  • +3 Re: [請益] 用迴圈跑出報名表 - PHP 板
    作者: 220.130.136.115 (台灣) 2013-08-16 09:28:04
    幫你把 Code 整理一下吧... 順便把一些壞習慣改掉 <?php //sql injection $str="select paperid,papername,paperman f …
    4F 3推
  • +2 [教學] OR || AND && 不能亂用 - PHP 板
    作者: 220.130.136.115 (台灣) 2013-07-18 10:46:53
    這篇算是亂入文 XD 回歸正題,在前幾篇的討論中有人使用到 And 這個 operator。 然而在 php 中 And 跟 && 是不同的東西,別混用了。 舉個範例 <?php …
    2F 2推
  • Re: [分享] PHP GC 機制 - PHP 板
    作者: 220.130.136.115 (台灣) 2013-06-04 09:32:44
    PHP 在判斷物件是否該被 GC 啟用了 reference counting 的機制來作為判斷。 簡單的說,當某個物件被參照時就把他的 refcount+1 。 例如 $a = new test() …
  • [分享] PHP GC 機制 - PHP 板
    作者: 220.130.136.115 (台灣) 2013-06-03 18:52:00
    題外話: 搞了好久終於註冊好 PTT 了。 ====================================== 前陣子看到某篇文章提到,要回收物件時, 使用 $obj = null 會馬上回 …
  • Re: [請益] 兩個 socket server 之間的溝通? - PHP 板
    作者: 220.130.136.115 (台灣) 2013-06-03 17:29:17
    要 keep 大量 connection,以及快速 response , 使用 socket 函數幾乎是不可行的方式。 傳統的 socket select,底層還是透過 polling 方式去監視 s …
guest
x)推文 r)回覆 e)編輯 d)刪除 M)收藏 ^x)轉錄 同主題: =)首篇 [)上篇 ])下篇