
文章插圖
實(shí)現(xiàn)說(shuō)明
1、給對(duì)象添加引用計(jì)數(shù)器,每次在某個(gè)地方引用計(jì)數(shù)器的值都會(huì)增加 。每當(dāng)引用失效時(shí),計(jì)數(shù)器的值就會(huì)減一 。
變量value的refcount減一后等于0的話,這個(gè)value就會(huì)被釋放,不是垃圾 。垃圾回收器不處理 。
變量value的refcount減一后大于0以上的話,這個(gè)value被認(rèn)為不能釋放,有可能成為垃圾 。
2、垃圾回收器收集可能的垃圾,達(dá)到一定數(shù)量后啟動(dòng)垃圾鑒定程序,釋放真正的垃圾 。
實(shí)例
'junior','age'=> 18);xdebug_debug_zval('a');// a:(refcount=1, is_ref=0),// array (size=2)//'name' => (refcount=1, is_ref=0),string 'junior' (length=6)//'age' => (refcount=1, is_ref=0),int 18// ex:添加一個(gè)已經(jīng)存在的元素到數(shù)組中$a['love'] =$a['name'];xdebug_debug_zval('a');// a:(refcount=1, is_ref=0),// array (size=3)//'name' => (refcount=2, is_ref=0),string 'junior' (length=6)//'age' => (refcount=1, is_ref=0),int 18//'love' => (refcount=2, is_ref=0),string 'junior' (length=6)// $a = array('one');// xdebug_debug_zval('a');// // $b = &$a;// $c = $a;// $b = &$c; // xdebug_debug_zval('b');// xdebug_debug_zval('c');// xdebug_debug_zval('a');// 清理變量容器問(wèn)題echo '------------內(nèi)存泄漏問(wèn)題-----------';$a = array('one');xdebug_debug_zval('a');// a:(refcount=1, is_ref=0),// array (size=1)//0 => (refcount=1, is_ref=0),string 'one' (length=3) $a[] = &$a;xdebug_debug_zval('a');// a:(refcount=2, is_ref=1),// array (size=2)//0 => (refcount=1, is_ref=0),string 'one' (length=3)//1 => (refcount=2, is_ref=1),//&array // unset($a);// (refcount=1, is_ref=1)=array (//0 => (refcount=1, is_ref=0)='one',//1 => (refcount=1, is_ref=1)=...//) // tip: unset($a) 后引用計(jì)數(shù)減一,盡管不再有某個(gè)作用域中的任何符號(hào)指向這個(gè)結(jié)構(gòu)(就是變量容器),// 由于數(shù)組元素"1"仍然指向數(shù)組本身,所以這個(gè)容器不能被清除// 因?yàn)闆](méi)有另外的符號(hào)指向它,用戶沒(méi)有辦法清除這個(gè)結(jié)構(gòu),結(jié)果就會(huì)導(dǎo)致內(nèi)存泄漏// 慶幸的是, php將在腳本執(zhí)行結(jié)束時(shí)清除這個(gè)數(shù)據(jù)結(jié)構(gòu), 但是在php清除之前,將耗費(fèi)不少內(nèi)存.// 同樣的情況也會(huì)發(fā)生在對(duì)象上,實(shí)際上對(duì)象更有可能出現(xiàn)這種情況,因?yàn)閷?duì)象總是隱式的被引用 。以上就是php引用計(jì)數(shù)實(shí)現(xiàn)垃圾回收的方法,希望對(duì)大家有所幫助 。
以上關(guān)于本文的內(nèi)容,僅作參考!溫馨提示:如遇健康、疾病相關(guān)的問(wèn)題,請(qǐng)您及時(shí)就醫(yī)或請(qǐng)專業(yè)人士給予相關(guān)指導(dǎo)!
「愛(ài)刨根生活網(wǎng)」www.malaban59.cn小編還為您精選了以下內(nèi)容,希望對(duì)您有所幫助:- php用遞歸求n的階乘 php中n階乘的實(shí)現(xiàn)方法
- php require和include區(qū)別 php中require和include如何區(qū)分
- cookie加密方式 php中如何配置Cookie加密
- php 消息隊(duì)列 php消息隊(duì)列的介紹
- php zval PHP中Zval是什么
- php中Suhosin是什么
- php圖片顯示不出來(lái) php不能生成圖片的解決辦法
- php斷點(diǎn)調(diào)試 php方法斷點(diǎn)如何實(shí)現(xiàn)
- php運(yùn)行模式有哪幾種 php常見(jiàn)運(yùn)行模式詳解
- php74新特性 php7.4新特性
