校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > PHP垃圾回收機制講解

PHP垃圾回收機制講解

熱門標簽:合肥ai電銷機器人費用 上海400客服電話怎么申請 滄州電銷外呼系統(tǒng)價格 400電話個人能不能辦理 天津電銷外呼系統(tǒng)違法嗎 手機外呼系統(tǒng)什么原理 溫州外呼系統(tǒng)招商 凱立德地鐵站地圖標注 銀行信貸電話機器人

PHP的垃圾回收機制

垃圾回收機制是一種動態(tài)存儲分配的方案。它會自動釋放程序不再需要的已分配的內(nèi)存塊。垃圾回收機制可以讓程序員不必過分關心程序內(nèi)存分配,從而將更多的精力投入到業(yè)務邏輯。在現(xiàn)在的流行各種語言當中,垃圾回收機制是新一代語言所共有的特征,如Python、PHP、C#、Ruby等都使用了垃圾回收機制。

好了,進入代碼實戰(zhàn)階段,注意兩點:

$a = 'hello'. mt_rand( 1, 1000 ); 
echo xdebug_debug_zval( 'a');
$b = $a;
echo xdebug_debug_zval( 'a');
$c = $a;
echo xdebug_debug_zval( 'a');
unset( $c );
echo xdebug_debug_zval( 'a');

輸出的結(jié)果是:

其中,zval struct結(jié)構體用于保存$a,zend_value union聯(lián)合體用于保存數(shù)據(jù)內(nèi)容也就是'hello916'。由于后面又聲明了b和c,所以C不得不又在底層給你搞出兩個zval struct結(jié)構體來。

其中,zval和zend value的結(jié)構大概如下:(注意!!!這并不是完整正確的PHP zval和zend_value在C語言中struct和union實現(xiàn),僅僅是挑出最重點的部分寫出來,強調(diào)一下:你沒有必要一個字不差背誦過zval和zend_value,你只需要知道原理)

zval {

string "a" //變量的名字是a

value zend_value //變量的值

type string //變量是字符串類型

}

zend_value {

string "hello916" //值的內(nèi)容

refcount 1 //引用計數(shù)

}

看到上面兩個,如果面試官問你php變量為什么能夠保存字符串"123"也能保存數(shù)字123,你知道該怎么回答了吧?就答出重點zval中有該變量的類型,當是字符串123的時候,type就是string,此時value指向“123”;當是整數(shù)123的時候,zval的type為int,value為123。這就是答題的思想,這很重要!而且,通過C語言都是可以實現(xiàn)的!具體真正的val和zend_value的模樣,有興趣的同學可以去網(wǎng)上搜搜,如果你沒有C語言的底子,可能比較吃力!前者是一個struct結(jié)構體,后者是一個union聯(lián)合體!

這個refcount就是傳說中的引用計數(shù)了,初始化的時候a后面的引用次數(shù)為1(注意,正確說法應該是a后面的賦值的數(shù)組zend_value引用計數(shù)為1,而不是a這個變量zval本身)。然后我們將$b = $a,其實相當于又一個變量指向了這個zend_value,所以refcount變?yōu)?,最后將$c = $a,同理,zend_value的refcount再次加1變成了3。然后,我們用unset( $c ),這會兒,C語言要做的就是把$c的zval給KO free掉,但是并不是free zend_value,這會兒zend_value的refcount就自然而然減1變成2了。

那么寫時拷貝是什么意思呢?看下面代碼:

?php
// 先不要問為什么非要加mt_rand,不然,絕筆說不過來了,到處都是坑
$a = 'hello'. mt_rand( 1, 1000 );
$b = $a;
$a = 123;
echo $b. PHP_EOL;
// 運行結(jié)果,不用我說吧,腳趾頭都知道是'hello'.mt_rand( 1, 1000 )的結(jié)果,絕對不可能是123。

其實,當你把$a賦值給$b的時候,$a的值并沒有真的復制了一份,這樣是對內(nèi)存的極度不尊重,也是對時間復雜度的極度不尊重,計算機僅僅是將$b指向了$a的值而已,這就叫多快好省。那么,什么時候真正的發(fā)生復制呢?就是當我們修改$a的值為123的時候,這個時候就不得已進行復制,避免$b的值和$a的一樣。

?php
$a = 'hello'. mt_rand( 1, 1000 );
$b = $a;
echo xdebug_debug_zval( 'a');
$a = 'world'. mt_rand( 2, 2000 );
echo xdebug_debug_zval( 'a');
// 運行結(jié)果為1,其中的原理你自己應該能理順了昂

叨逼叨了這么長,通過簡單的案例解釋清楚了兩個要點:引用計數(shù)和寫時拷貝,那么垃圾回收也該來了。當一個zval在被unset的時候、或者從一個函數(shù)中運行完畢出來(就是局部變量)的時候等等很多地方,都會產(chǎn)生zval與zend_value發(fā)生斷開的行為,這個時候zend引擎需要檢測的就是zend_value的refcount是否為0,如果為0,則直接KO free空出內(nèi)容來。如果zend_value的recount不為0(廢話一定是大于0),這個value不能被釋放,但是也不代表這個zend_value是清白的,因為此zend_value依然可能是個垃圾。

什么樣的情況會導致zend_value的refcount不為0,但是這個zend_value卻是個垃圾呢?PHP7種兩種情況:

?php
$arr = [ 1 ];
$arr[] = $arr;
unset( $arr );

這種情況下,zend_value不會能釋放,但也不能放過它,不然一定會產(chǎn)生內(nèi)存泄漏,所以這會兒zend_value會被扔到一個叫做垃圾回收堆中,然后zend引擎會依次對垃圾回收堆中的這些zend_value進行二次檢測,檢測是不是由于上述兩種情況造成的refcount為1但是自身卻確實沒有人再用了,如果一旦確定是上述兩種情況造成的,那么就會將zend_value徹底抹掉釋放內(nèi)存。

那么垃圾回收發(fā)生在什么時候?有些同學可能有疑問,就是php不是運行一次就銷毀了嗎,我要著gc有何用?并不是啦,首先當一次fpm運行完畢后,最后一定還有gc的,這個銷毀就是gc;其次是,內(nèi)存都是即用即釋放的,而不是攢著非得到最后,你想想一個典型的場景,你的控制器里的某個方法里用了一個函數(shù),函數(shù)需要一個巨大的數(shù)組參數(shù),然后函數(shù)還需要修改這個巨大的數(shù)組參數(shù),你們應該是函數(shù)的運行范圍里面修改這個數(shù)組,所以此時會發(fā)生寫時拷貝了,當函數(shù)運行完畢后,就得趕緊釋放掉這塊兒內(nèi)存以供給其他進程使用,而不是非得等到本地fpm request徹底完成后才銷毀。

說到最后,說些自己的話:大多數(shù)情況下,面試官問你問題主要是想一是要你個思維思路,二是看你學習程度。就像gc這個問題,其實很多腳本語言的垃圾回收機制基本上都是靠引用計數(shù)和寫時拷貝這兩種算法結(jié)合完成的,所以如果你設計一門腳本語言,gc機制就按照這兩種算法進行設計即可。其次是大多數(shù)phper不會看這些東西的,面試官問你這個問題不是要你死記硬背那么多細節(jié),你背不過的,他還是想探測你平時有沒有更積極地往深層發(fā)展的心態(tài)。

注重體現(xiàn)重點,很多細節(jié)實在沒法寫,比如我舉個例子$a=[],xdebug_debug_zval( $a )的refcount值你猜是多少? 7.1.17下竟然是2,你是不是以為是1,然而并不是。不過你不用糾結(jié)這些細節(jié),gc的關鍵就是能說出引用計數(shù)的原理和寫時拷貝,很多細節(jié)深處都各種奇奇怪怪的東西,面試官自己都不一定知道。

到此這篇關于PHP垃圾回收機制講解的文章就介紹到這了,更多相關PHP垃圾回收機制內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • 解決Laravel5.x的php artisan migrate數(shù)據(jù)庫遷移創(chuàng)建操作報錯SQLSTATE[42000]
  • laravel執(zhí)行php artisan migrate報錯的解決方法
  • laravel 5.1下php artisan migrate的使用注意事項總結(jié)
  • PHP反射機制案例講解
  • php之性能優(yōu)化案例
  • php artisan命令信息列舉

標簽:怒江 酒泉 溫州 金華 白城 七臺河 赤峰 洛陽

巨人網(wǎng)絡通訊聲明:本文標題《PHP垃圾回收機制講解》,本文關鍵詞  PHP,垃圾,回收,機制,講解,;如發(fā)現(xiàn)本文內(nèi)容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《PHP垃圾回收機制講解》相關的同類信息!
  • 本頁收集關于PHP垃圾回收機制講解的相關信息資訊供網(wǎng)民參考!
  • 推薦文章
    校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃
    亚洲成人自拍偷拍| 国产精品久久久久久久久久免费看| 一区二区三区四区在线播放| 久久久久久久综合| 欧美一区国产二区| 欧美日韩精品是欧美日韩精品| 99久久精品国产一区| 国产精品88888| 国产麻豆精品视频| 久久99久久久欧美国产| 免费久久99精品国产| 男男gaygay亚洲| 久久精品久久精品| 亚洲午夜久久久久久久久电影院| 欧美国产欧美综合| 国产精品久久久久久久久动漫 | 风流少妇一区二区| 国产91精品一区二区麻豆网站| 国产激情一区二区三区| 国产69精品一区二区亚洲孕妇 | 亚洲人成精品久久久久| 91精品国产91久久综合桃花| 国产成人免费视频一区| 日韩专区在线视频| 亚洲欧洲另类国产综合| 亚洲免费三区一区二区| 欧美日韩成人综合在线一区二区| 欧美四级电影网| 欧美精品99久久久**| 日韩欧美电影一区| 久久久久久影视| 国产婷婷一区二区| 国产精品二三区| 日韩一区二区三区视频在线| 欧美成人性福生活免费看| 精品国产一区二区三区四区四 | 久久久久亚洲综合| 久久在线观看免费| 亚洲美女区一区| 有码一区二区三区| 最新中文字幕一区二区三区| 国产精品免费av| 日韩一区在线播放| 亚洲精品一二三| 日韩不卡一二三区| 国产成人免费视频网站 | 国产精品视频一二三| 中文无字幕一区二区三区 | 国产精品国产三级国产aⅴ中文 | 99视频精品全部免费在线| 欧美日韩卡一卡二| 欧美第一区第二区| 国产精品网站在线播放| 亚洲在线一区二区三区| 免费观看日韩av| 国产黄色成人av| 色老汉一区二区三区| 欧美一区二区三区成人| 久久亚洲春色中文字幕久久久| 日本一区二区电影| 亚洲国产精品久久人人爱| 久久精品国产精品亚洲综合| 成人精品免费网站| 678五月天丁香亚洲综合网| 中文字幕精品综合| 午夜久久电影网| 国产成人精品亚洲日本在线桃色 | 久久久精品日韩欧美| 日本一区二区三区在线观看| 中文字幕一区日韩精品欧美| 日本亚洲欧美天堂免费| 97精品久久久久中文字幕| 91精品国产欧美一区二区| 国产精品每日更新| 毛片不卡一区二区| 一本到三区不卡视频| 日韩一区二区中文字幕| 亚洲欧洲另类国产综合| 蜜桃视频在线一区| 色综合久久精品| 欧美国产精品专区| 精品一区精品二区高清| 制服.丝袜.亚洲.另类.中文| 亚洲日本va午夜在线电影| 韩国在线一区二区| 欧美日本一道本| 自拍偷自拍亚洲精品播放| 国产成人精品亚洲777人妖| 欧美大黄免费观看| 亚洲欧美一区二区久久 | 亚洲欧美偷拍卡通变态| 国内精品视频一区二区三区八戒| 欧美日韩一区中文字幕| 亚洲欧美在线高清| 国产不卡在线视频| 精品电影一区二区| 日韩电影免费一区| 欧美日韩一区中文字幕| 亚洲一二三区在线观看| 色综合久久久网| 中文字幕一区二区不卡 | 久久精品国产一区二区| 欧美v国产在线一区二区三区| 香蕉加勒比综合久久| 欧美性色黄大片手机版| 亚洲综合一区在线| 91浏览器打开| 亚洲精品欧美综合四区| 欧美这里有精品| 亚洲国产精品久久不卡毛片| 欧美亚洲动漫制服丝袜| 一区二区三区四区在线免费观看 | 国产成人综合在线| 国产婷婷色一区二区三区在线| 精品在线免费观看| 国产午夜精品一区二区| 国产精品18久久久| 综合欧美一区二区三区| 色婷婷综合视频在线观看| 亚洲综合丝袜美腿| 欧美成人欧美edvon| 国产夫妻精品视频| 国产精品成人网| 91国产成人在线| 日韩精品乱码av一区二区| 欧美成人一区二区三区| 日本欧美韩国一区三区| 日韩精品一区二区三区在线| 韩国精品主播一区二区在线观看 | 亚洲自拍欧美精品| 欧美日韩国产三级| 中文字幕av一区二区三区高| 不卡一卡二卡三乱码免费网站| 中文字幕中文字幕一区二区| 91久久精品午夜一区二区| 日韩高清不卡一区二区| 久久久亚洲精品石原莉奈| 成人理论电影网| 香蕉久久一区二区不卡无毒影院| 精品精品欲导航| 99国产精品国产精品久久| 天堂va蜜桃一区二区三区漫画版| 欧美哺乳videos| 99精品国产热久久91蜜凸| 石原莉奈在线亚洲二区| 国产精品美女一区二区三区| 欧美少妇一区二区| 国产麻豆一精品一av一免费| 一区二区欧美精品| 精品国产乱码久久久久久浪潮| 成人不卡免费av| 日韩成人免费电影| 国产精品视频麻豆| 久久久久高清精品| 在线91免费看| 9i看片成人免费高清| 蜜臀a∨国产成人精品| 中文字幕一区av| 日韩精品在线网站| 色av成人天堂桃色av| 国产寡妇亲子伦一区二区| 天天色 色综合| 亚洲少妇中出一区| 26uuu亚洲| 91精品国产综合久久精品图片| 色婷婷亚洲婷婷| 成人爱爱电影网址| 国产精品一二一区| 美女脱光内衣内裤视频久久影院| 日韩精品中文字幕在线不卡尤物| 国产91富婆露脸刺激对白| 日产国产欧美视频一区精品| 亚洲尤物视频在线| 《视频一区视频二区| 国产精品午夜电影| 国产日韩成人精品| 久久你懂得1024| 欧美不卡在线视频| 欧美一区二区三区免费| 精品视频资源站| 欧美一区二区私人影院日本| 欧美人与禽zozo性伦| 欧美在线免费观看视频| 日本高清无吗v一区| 91在线一区二区三区| www.亚洲色图| 99久久精品99国产精品| www.性欧美| 色婷婷国产精品久久包臀| 成人av网址在线| 99精品久久99久久久久| 国产精品91一区二区| 国产精品白丝av| 波多野结衣中文字幕一区| 成人动漫精品一区二区| 色香蕉久久蜜桃| 欧美日韩一区国产| 日韩欧美国产午夜精品| 日韩欧美国产一二三区| 日韩免费看的电影|