下載本文檔
版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第掌握PHP垃圾回收機(jī)制詳解php的垃圾回收機(jī)制可以簡(jiǎn)單總結(jié)為引用計(jì)數(shù)寫(xiě)時(shí)復(fù)制COW機(jī)制,
本文主要和大家分享掌握php垃圾回收機(jī)制的知識(shí),希望能幫助到大家。
引用計(jì)數(shù)基本知識(shí)
官網(wǎng)的解答如下每個(gè)php變量存在一個(gè)叫”zval”的變量容器中一個(gè)zval變量容器,除了包含變量的類(lèi)型和值,還包括兩個(gè)字節(jié)的額外信息is_ref和refcountis_ref是個(gè)bool值,用來(lái)標(biāo)識(shí)這個(gè)變量是否是屬于引用集合(referenceset)。通過(guò)這個(gè)字節(jié),php引擎才能把普通變量和引用變量區(qū)分開(kāi)來(lái)refcount用以表示指向這個(gè)zval變量容器的變量個(gè)數(shù)PHP5中的引用計(jì)數(shù)在PHP5中,zval的內(nèi)存是單獨(dú)從堆(heap)中分配的(有少數(shù)例外情況),PHP需要知道哪些zval是正在使用的,哪些是需要釋放的。所以這就需要用到引用計(jì)數(shù):zval中refcount__gc的值用于保存zval本身被引用的次數(shù),比如b=12語(yǔ)句中,12被兩個(gè)變量引用,所以它的引用計(jì)數(shù)就是2。如果引用計(jì)數(shù)變成0,就意味著這個(gè)變量已經(jīng)沒(méi)有用了,內(nèi)存也就可以釋放了。
如下:
php
//phpzval變量容器
$a=1;
$b=1;
$c=
$d=$b;
$e=range(0,3);
xdebug_debug_zval('a');
xdebug_debug_zval('b');
xdebug_debug_zval('c');
xdebug_debug_zval('d');
xdebug_debug_zval('e');
結(jié)果如下
a:(refcount=2,is_ref=1),int1b:(refcount=2,is_ref=0),int1c:(refcount=2,is_ref=1),int1d:(refcount=2,is_ref=0),int1e:(refcount=1,is_ref=0),array(size=4)0=(refcount=1,is_ref=0),int01=(refcount=1,is_ref=0),int12=(refcount=1,is_ref=0),int23=(refcount=1,is_ref=0),int3
每一個(gè)變量都記了自己的數(shù)PHP7中的zval在PHP7中zval有了新的實(shí)現(xiàn)方式。最基礎(chǔ)的變化就是zval需要的內(nèi)存不再是單獨(dú)從堆上分配,不再自己存儲(chǔ)引用計(jì)數(shù)。復(fù)雜數(shù)據(jù)類(lèi)型(比如字符串、數(shù)組和對(duì)象)的引用計(jì)數(shù)由其自身來(lái)存儲(chǔ)。這種實(shí)現(xiàn)方式有以下好處:簡(jiǎn)單數(shù)據(jù)類(lèi)型不需要單獨(dú)分配內(nèi)存,也不需要計(jì)數(shù)不會(huì)再有兩次計(jì)數(shù)的情況,在對(duì)象中,只有對(duì)象自身存儲(chǔ)的計(jì)數(shù)是有效的由于現(xiàn)在計(jì)數(shù)由數(shù)值自身存儲(chǔ),所以也就可以和非zval結(jié)構(gòu)的數(shù)據(jù)共享,比如zval和hashtablekey之間間接訪(fǎng)問(wèn)需要的指針數(shù)減少了
php
//phpzval變量容器
$a=1;
$b=1;
$c=
$d=$b;
$e=range(0,3);
xdebug_debug_zval('a');
xdebug_debug_zval('b');
xdebug_debug_zval('c');
xdebug_debug_zval('d');
xdebug_debug_zval('e');結(jié)果如下a:(refcount=2,is_ref=1)int1b:(refcount=0,is_ref=0)int1c:(refcount=2,is_ref=1)int1d:(refcount=0,is_ref=0)int1e:(refcount=1,is_ref=0)array(size=4)0=(refcount=0,is_ref=0)int01=(refcount=0,is_ref=0)int12=(refcount=0,is_ref=0)int23=(refcount=0,is_ref=0)int3
普通變量不再記自己的數(shù),數(shù)組這樣的復(fù)雜類(lèi)型記自己的數(shù)什么是垃圾只有在準(zhǔn)則3下,GC才會(huì)把zval收集起來(lái),然后通過(guò)新的算法來(lái)判斷此zval是否為垃圾。那么如何判斷這么一個(gè)變量是否為真正的垃圾呢?簡(jiǎn)單的說(shuō),就是對(duì)此zval中的每個(gè)元素進(jìn)行一次refcount減1操作,操作完成之后,如果zval的refcount=0,那么這個(gè)zval就是一個(gè)垃圾如果一個(gè)zval的refcount增加,那么此zval還在使用,不屬于垃圾如果一個(gè)zval的refcount減少到0,那么zval可以被釋放掉,不屬于垃圾如果一個(gè)zval的refcount減少之后大于0,那么此
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 小區(qū)消防安全評(píng)估指南
- 安全生產(chǎn)典范企業(yè)講解
- 2025-2026人教版小學(xué)二年級(jí)語(yǔ)文期末測(cè)試卷上
- 結(jié)構(gòu)專(zhuān)業(yè)考試題及答案
- 2025-2026人教版三年級(jí)語(yǔ)文上學(xué)期卷
- 腸道菌群與NAFLD肝硬化PHG:MDT調(diào)節(jié)策略
- 2025-2026一年級(jí)語(yǔ)文上學(xué)期期末測(cè)試卷
- 腸狹窄術(shù)后腹腔感染的處理策略
- 腸梗阻合并糖尿病患者的血糖管理策略
- 衛(wèi)生院執(zhí)業(yè)監(jiān)督管理制度
- 安全生產(chǎn)目標(biāo)及考核制度
- (2026版)患者十大安全目標(biāo)(2篇)
- 2026年北大拉丁語(yǔ)標(biāo)準(zhǔn)考試試題
- 臨床護(hù)理操作流程禮儀規(guī)范
- 2025年酒店總經(jīng)理年度工作總結(jié)暨戰(zhàn)略規(guī)劃
- 空氣栓塞課件教學(xué)
- 2025年國(guó)家市場(chǎng)監(jiān)管總局公開(kāi)遴選公務(wù)員面試題及答案
- 肌骨康復(fù)腰椎課件
- 患者身份識(shí)別管理標(biāo)準(zhǔn)
- 2025年10月自考04184線(xiàn)性代數(shù)經(jīng)管類(lèi)試題及答案含評(píng)分參考
- 2025年勞動(dòng)保障協(xié)理員三級(jí)技能試題及答案
評(píng)論
0/150
提交評(píng)論