成人性生交大片免费看视频r_亚洲综合极品香蕉久久网_在线视频免费观看一区_亚洲精品亚洲人成人网在线播放_国产精品毛片av_久久久久国产精品www_亚洲国产一区二区三区在线播_日韩一区二区三区四区区区_亚洲精品国产无套在线观_国产免费www

主頁 > 知識(shí)庫 > 詳解PHP的引用計(jì)數(shù)

詳解PHP的引用計(jì)數(shù)

熱門標(biāo)簽:衡水外呼系統(tǒng)平臺(tái) 地圖標(biāo)注平臺(tái)怎么給錢注冊(cè) 常州地圖標(biāo)注服務(wù)商 注冊(cè)400電話申請(qǐng) 百度商鋪地圖標(biāo)注 釘釘打卡地圖標(biāo)注 新河科技智能外呼系統(tǒng)怎么樣 福州人工外呼系統(tǒng)哪家強(qiáng) 安裝電銷外呼系統(tǒng)

什么是引用計(jì)數(shù)

在PHP的數(shù)據(jù)結(jié)構(gòu)中,引用計(jì)數(shù)就是指每一個(gè)變量,除了保存了它們的類型和值之外,還額外保存了兩個(gè)內(nèi)容,一個(gè)是當(dāng)前這個(gè)變量是否被引用,另一個(gè)是引用的次數(shù)。為什么要多保存這樣兩個(gè)內(nèi)容呢?當(dāng)然是為了垃圾回收(GC)。也就是說,當(dāng)引用次數(shù)為0的時(shí)候,這個(gè)變量就沒有再被使用了,就可以通過 GC 來進(jìn)行回收,釋放占用的內(nèi)存資源。任何程序都不能無限制的一直占用著內(nèi)存資源,過大的內(nèi)存占用往往會(huì)帶來一個(gè)嚴(yán)重的問題,那就是內(nèi)存泄露,而 GC 就是PHP底層自動(dòng)幫我們完成了內(nèi)存的銷毀,而不用像 C 一樣必須去手動(dòng)地 free 。

怎么查看引用計(jì)數(shù)?

我們需要安裝 xdebug 擴(kuò)展,然后使用 xdebug_debug_zval() 函數(shù)就可以看到指定內(nèi)存的詳細(xì)信息了,比如:

$a = "I am a String";
xdebug_debug_zval('a');
// a: (refcount=1, is_ref=0)='I am a String'

從上述內(nèi)容中可以看出,這個(gè) $a 變量的內(nèi)容是 I am a String 這樣一個(gè)字符串。而括號(hào)中的 refcount 就是引用次數(shù),is_ref 則是說明這個(gè)變量是否被引用。我們通過變量賦值來看看這個(gè)兩個(gè)參數(shù)是如何變化的。

$b = $a;
xdebug_debug_zval('a');
// a: (refcount=1, is_ref=0)='I am a String'

$b = $a;
xdebug_debug_zval('a');
// a: (refcount=2, is_ref=1)='I am a String'

當(dāng)我們進(jìn)行普通賦值后,refcount 和 is_ref 沒有任何變化,但當(dāng)我們進(jìn)行引用賦值后,可以看到 refcount 變成了2,is_ref 變成了1。這也就是說明當(dāng)前的 \a 變量被引用賦值了,它的內(nèi)存符號(hào)表服務(wù)于a變量被引用賦值了,它的內(nèi)存符號(hào)表服務(wù)于a 和 $b 兩個(gè)變量。

$c = $a;
xdebug_debug_zval('a');
// a: (refcount=3, is_ref=1)='I am a String'

unset($c, $b);
xdebug_debug_zval('a');
// a: (refcount=1, is_ref=1)='I am a String'

$b = $a;
$c = $a;
$b = "I am a String new";
xdebug_debug_zval('a');
// a: (refcount=3, is_ref=1)='I am a String new'

unset($a);
xdebug_debug_zval('a');
// a: no such symbol

繼續(xù)增加一個(gè) c 的引用賦值,可以看到 refcount 會(huì)繼續(xù)增加。然后 unset 掉c的引用賦值,可以看到refcount會(huì)繼續(xù)增加。然后unset掉b 和 $c 之后,refcount 恢復(fù)到了1,不過這時(shí)需要注意的是,is_ref 依然還是1,也就是說,這個(gè)變量被引用過,這個(gè) is_ref 就會(huì)變成1,即使引用的變量都已經(jīng) unset 掉了這個(gè)值依然不變。

最后我們 unset 掉 $a ,顯示的就是 no such symbol 了。當(dāng)前變量已經(jīng)被銷毀不是一個(gè)可以用的符號(hào)引用了。(注意,PHP中的變量對(duì)應(yīng)的是內(nèi)存的符號(hào)表,并不是真正的內(nèi)存地址)

對(duì)象的引用計(jì)數(shù)

和普通類型的變量一樣,對(duì)象變量也是使用同樣的計(jì)數(shù)規(guī)則。

// 對(duì)象引用計(jì)數(shù)
class A{

}
$objA = new A();
xdebug_debug_zval('objA');
// objA: (refcount=1, is_ref=0)=class A {  }

$objB = $objA;
xdebug_debug_zval('objA');
// objA: (refcount=2, is_ref=0)=class A {  }

$objC = $objA;
xdebug_debug_zval('objA');
// objA: (refcount=3, is_ref=0)=class A {  }

unset($objB);
class C{

}
$objC = new C;
xdebug_debug_zval('objA');
// objA: (refcount=1, is_ref=0)=class A {  }

不過這里需要注意的是,對(duì)象的符號(hào)表是建立的連接,也就是說,對(duì) objC 進(jìn)行重新實(shí)例化或者修改為 NULL ,并不會(huì)影響objC進(jìn)行重新實(shí)例化或者修改為NULL,并不會(huì)影響objA 的內(nèi)容,對(duì)象進(jìn)行普通賦值操作也是引用類型的符號(hào)表賦值,所以我們不需要加 符號(hào)。

數(shù)組的引用計(jì)數(shù)

// 數(shù)組引用計(jì)數(shù)
$arrA = [
    'a'=>1,
    'b'=>2,
];
xdebug_debug_zval('arrA');
// arrA: (refcount=2, is_ref=0)=array (
//     'a' => (refcount=0, is_ref=0)=1, 
//     'b' => (refcount=0, is_ref=0)=2
// )

$arrB = $arrA;
$arrC = $arrA;
xdebug_debug_zval('arrA');
// arrA: (refcount=4, is_ref=0)=array (
//     'a' => (refcount=0, is_ref=0)=1, 
//     'b' => (refcount=0, is_ref=0)=2
// )

unset($arrB);
$arrC = ['c'=>3];
xdebug_debug_zval('arrA');
// arrA: (refcount=2, is_ref=0)=array (
//     'a' => (refcount=0, is_ref=0)=1, 
//     'b' => (refcount=0, is_ref=0)=2
// )

// 添加一個(gè)已經(jīng)存在的元素
$arrA['c'] = $arrA['a'];
xdebug_debug_zval('arrA');
// arrA: (refcount=1, is_ref=0)=array (
//     'a' => (refcount=2, is_ref=1)=1, 
//     'b' => (refcount=0, is_ref=0)=2, 
//     'c' => (refcount=2, is_ref=1)=1
// )

調(diào)試數(shù)組的時(shí)候,我們會(huì)發(fā)現(xiàn)兩個(gè)比較有意思的事情。

一是數(shù)組內(nèi)部的每個(gè)元素又有單獨(dú)的自己的引用計(jì)數(shù)。這也比較好理解,每一個(gè)數(shù)組元素都可以看做是一個(gè)單獨(dú)的變量,但數(shù)組就是這堆變量的一個(gè)哈希集合。如果在對(duì)象中有成員變量的話,也是一樣的效果。當(dāng)數(shù)組中的某一個(gè)元素被 引用賦值給其他變量之后,這個(gè)元素的 refcount 會(huì)增加,不會(huì)影響整個(gè)數(shù)組的 refcount 。

二是數(shù)組默認(rèn)上來的 refcount 是2。其實(shí)這是 PHP7 之后的一種新的特性,當(dāng)數(shù)組定義并初始化后,會(huì)將這個(gè)數(shù)組轉(zhuǎn)變成一個(gè)不可變數(shù)組(immutable array)。為了和普通數(shù)組區(qū)分開,這種數(shù)組的 refcount 是從2開始起步的。當(dāng)我們修改一下這個(gè)數(shù)組中的任何元素后,這個(gè)數(shù)組就會(huì)變回普通數(shù)組,也就是 refcount 會(huì)變回1。這個(gè)大家可以自己嘗試下,關(guān)于為什么要這樣做的問題,官方的解釋是為了效率,具體的原理可能還是需要深挖 PHP7 的源碼才能知曉。

關(guān)于內(nèi)存泄露需要注意的地方

其實(shí) PHP 在底層已經(jīng)幫我們做好了 GC 機(jī)制就不需要太關(guān)心變量的銷毀釋放問題,但是,千萬要注意的是對(duì)象或數(shù)組中的元素是可以賦值為自身的,也就是說,給某個(gè)元素賦值一個(gè)自身的引用就變成了循環(huán)引用。那么這個(gè)對(duì)象就基本不太可能會(huì)被 GC 自動(dòng)銷毀了。

// 對(duì)象循環(huán)引用
class D{
    public $d;
}
$d = new D;
$d->d = $d;
xdebug_debug_zval('d');
// d: (refcount=2, is_ref=0)=class D { 
//     public $d = (refcount=2, is_ref=0)=... 
// }

// 數(shù)組循環(huán)引用
$arrA['arrA'] = $arrA;
xdebug_debug_zval('arrA');
// arrA: (refcount=2, is_ref=1)=array (
//     'a' => (refcount=0, is_ref=0)=1, 
//     'b' => (refcount=0, is_ref=0)=2, 
//     'arrA' => (refcount=2, is_ref=1)=...
// )

不管是對(duì)象還是數(shù)組,在打印調(diào)試時(shí)出現(xiàn)了 ... 這樣的省略號(hào),那么你的程序中就出現(xiàn)了循環(huán)引用。所以這個(gè)問題應(yīng)該是我們?cè)谌粘i_發(fā)中應(yīng)該時(shí)刻關(guān)注的問題。

總結(jié)

引用計(jì)數(shù)是了解垃圾回收機(jī)制的前提條件,而且正是因?yàn)楝F(xiàn)代語言中都有一套類似的垃圾回收機(jī)制才讓我們的編程變得更加容易且安全。那么有人說了,日常開發(fā)根本用不到這些呀?用不到不代表不應(yīng)該去學(xué)習(xí),就像循環(huán)引用這個(gè)問題一樣,當(dāng)代碼中充斥著大量的類似代碼時(shí),系統(tǒng)崩潰只是遲早的事情,所以,這些知識(shí)是我們向更高級(jí)的程序進(jìn)階所不可或缺的內(nèi)容。

測(cè)試代碼: github.com/zhangyue050…

以上就是詳解PHP的引用計(jì)數(shù)的詳細(xì)內(nèi)容,更多關(guān)于PHP的引用計(jì)數(shù)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

您可能感興趣的文章:
  • PHP 引用的概念
  • php的對(duì)象傳值與引用傳值代碼實(shí)例講解
  • php傳值和傳引用的區(qū)別點(diǎn)總結(jié)
  • php 多個(gè)變量指向同一個(gè)引用($b = &$a)用法分析
  • php引用和拷貝的區(qū)別知識(shí)點(diǎn)總結(jié)
  • php中對(duì)象引用和復(fù)制實(shí)例分析
  • PHP實(shí)現(xiàn)無限極分類的兩種方式示例【遞歸和引用方式】
  • PHP中引用類型和值類型功能與用法示例
  • PHP 弱引用的相關(guān)總結(jié)

標(biāo)簽:白城 克拉瑪依 六安 鶴崗 唐山 柳州 鷹潭 遼陽

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《詳解PHP的引用計(jì)數(shù)》,本文關(guān)鍵詞  詳解,PHP,的,引用,計(jì)數(shù),詳解,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《詳解PHP的引用計(jì)數(shù)》相關(guān)的同類信息!
  • 本頁收集關(guān)于詳解PHP的引用計(jì)數(shù)的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    中文无码精品一区二区三区| 中文字幕av久久爽一区| 精品国产av 无码一区二区三区| 中国字幕a在线看韩国电影| 一二三四社区欧美黄| 五月婷婷丁香网| 夜夜骑日日操| 久久精品九九| 永久亚洲成a人片777777| 免费看黄色片的网站| 久久99精品一区二区三区三区| 一级在线免费观看| 夜夜操 天天摸| 国语自产精品视频在线看一大j8| 欧美专区中文字幕| 欧美午夜影院| 春日野结衣av| 交换国产精品视频一区| 男女高潮又爽又黄又无遮挡| 亚洲日本电影在线| 亚洲精品一品区二品区三品区| 欧美xxxx14xxxxx性爽| 亚洲欧美怡红院| 亚洲va欧美va国产综合剧情| 久久99精品久久久久久久久久| 欧美大奶一区二区| 中文字幕在线一区| 精品国产乱码久久久久夜深人妻| 欧美日韩一区二区三区在线播放| 国产aa视频| 亚洲精品国产免费| 成人在线免费观看视视频| 欧美丝袜美腿| 黄色影片网址| 欧美 日韩 国产 成人 在线观看| 欧美日本韩国国产| 国产综合视频在线观看| 国产精品久久久久久久久鸭| 精品国偷自产在线视频| 日本一本不卡| www.三级.com| 日本一级片免费| 中文字幕人妻一区二区三区在线视频| 亚洲高清在线| 国产网站免费看| 不卡一区二区三区四区五区| 蜜桃传媒九九九| 国产精品免费aⅴ片在线观看| 国产无套粉嫩白浆内谢| 久久亚洲欧美日韩精品专区| 首播影院在线观看免费观看电视| 成人午夜大片免费观看| 美女把尿口扒开让男人桶在线观看| 黄色高清在线观看| 懂色av粉嫩av蜜臀av| 日韩成人免费视频| 国产男女裸体做爰爽爽| 色狠狠一区二区三区香蕉| 亚洲一区二区小说| 日本韩国欧美国产| 欧美精品一区视频| 久久超碰97中文字幕| av免费观看网站| 久久精品视频7| 欧美一区在线观看视频| 黄色片免费网址| avtt在线播放| 久久精品中文字幕| 久久久久久久久久久久久av| 亚洲 国产 欧美 日韩| 2020久久国产精品| 日本一区二区免费不卡| 狠狠操精品视频| 亚洲人成免费电影| 国产片在线观看| 伊人春色在线| 四虎永久精品在线| 免费精品国产的网站免费观看| 日韩有码一区| 日韩欧美一级二级三级| 午夜在线视频播放| 欧美极品少妇xxxxⅹ高跟鞋| 特级毛片在线免费观看| 国产黄色高清视频| 日韩av电影免费在线观看| 动漫av一区二区三区| 暗呦丨小u女国产精品| 日本一级黄色大片| 黄色在线看片| 亚洲欧美中文字幕在线观看| 日本久久国产| 久久精品国产精品亚洲毛片| 国产男女无套在线播放| 91香蕉视频在线播放| 香蕉免费一区二区三区在线观看| 欧美精品中文字幕一区二区| 我要看一级黄色大片| 亚洲精品二区三区| 中文字幕+乱码+中文字幕一区| 国产精品爱啪在线线免费观看| 在线观看h视频| 国产在线精品免费av| 亚洲影影院av| 蜜桃av在线免费观看| 色资源网站在线观看| 免费h精品视频在线播放| 国产人妖ts一区二区| 性猛交ⅹ×××乱大交| 亚洲电影在线一区二区三区| 91精品婷婷色在线观看| 欧美日韩国产综合新一区| 免费精品在线视频| 日韩一区二区三区精品视频第3页| julia一区二区中文久久94| 国产精品乱人伦一区二区| 亚洲一区二区三区777| 蜜桃精品噜噜噜成人av| 色呦呦一区二区| 狠狠躁18三区二区一区| 国产欧美日韩免费看aⅴ视频| www.欧美黄色| 91免费视频黄| 日本一二三区视频免费高清| 中文字幕18页| 久久天堂精品| 成人午夜小视频| 狂野欧美性猛交xxxx巴西| 欧美午夜片欧美片在线观看| 中文天堂在线资源| 成人免费看吃奶视频网站| 欧美日韩一区二区三区四区| 国产成人免费高清视频| 日本高清中文字幕在线| 色噜噜狠狠一区二区三区果冻| 久久精视频免费在线久久完整在线看| 久久99国产精品自在自在app| 粉嫩小泬无遮挡久久久久久| av不卡免费电影| 小视频在线播放| 天堂在线第六区| 亚洲AV成人无码网站天堂久久| 国产福利91精品一区| 熟年交尾五十路视频在线播放| xfplay先锋影音夜色资源站| 久久一区二区三区喷水| 欧美一区 二区 三区| 亚洲网中文字幕| av在线免费观看国产| 国产欧美欧洲在线观看| 国产小视频你懂的| 网站免费满18成年在线观看| 91精品入口蜜桃| 妺妺窝人体色www婷婷| 欧美日韩 一区二区三区| 一本二本三本亚洲码| 狠狠躁夜夜躁久久躁别揉| 日韩极品视频在线观看| 91视频精品在这里| 欧美壮男野外gaytube| 亚洲欧美国产精品久久久久久久| 日本成在线观看| jazzjazz国产精品麻豆| 岛国av在线播放| 国产福利精品av综合导导航| 国产女人18毛片水真多成人如厕| 亚洲激情视频网站| 欧美精品成人91久久久久久久| 台湾色综合娱乐中文网| 国产另类ts人妖一区二区| 欧美精品欧美精品| 国产又粗又长又大的视频| 亚洲精品ww久久久久久p站| 国产精品嫩草影院在线看| eeuss影院www在线| 久久久久久久久久久久久国产| 亚洲成av人片在线观看无| 亚洲精品视频在线播放| 91av久久久| 毛片毛片毛片毛| 欧美丝袜足交| 亚洲欧洲精品视频| 91中文字幕| 日韩精品免费一区二区三区| 国产日韩欧美一区| 免费观看日韩电影| 亚洲成人动漫一区| 国产91在线播放九色| 日本xxx在线播放| 在线免费观看av网| 国内精品久久久久久久97牛牛| 国产精品久久久久久久久久妞妞| 私密视频在线观看| 国产人妻精品一区二区三区不卡| 黑丝av在线播放| 99精品欧美一区二区| 人人妻人人澡人人爽人人欧美一区| 秋霞精品一区二区三区| 午夜精品久久久久久久久久| 国产麻豆一区二区三区精品视频| 国产一本一道久久香蕉| 99久久999| 极品少妇一区二区三区| 亚洲最大色图| 久久国产日韩欧美| 国产性色av一区二区| 51精品久久久久久久蜜臀| 最近中文字幕免费mv2018在线| 国产伦精品一区二区三毛| 日本免费精品视频| 精品欧美一区二区久久久伦| www操com| 成人在线免费观看视频| 有码一区二区三区| 色哦色哦哦色天天综合| 舐め犯し波多野结衣在线观看| 天天躁夜夜躁狠狠是什么心态| 茄子视频成人在线| 成人一级片在线观看| 好看不卡的中文字幕| 成人影片在线播放| 免费在线观看的av网站| 亚洲综合网在线观看| 国产丝袜一区| 亚洲精品www久久久久久广东| 国产精品腿扒开做爽爽爽挤奶网站| gogogogo高清视频在线| 国产在线视频一区二区三区| 国产午夜在线视频| 亚洲国内高清视频| 日韩色淫视频| 亚洲区精品久久一区二区三区| 一区二区三区在线|网站| 波多视频一区| 中文字幕日韩在线播放| 国产午夜福利在线播放| 国产成人一区二区| 免费看污污网站| 在线黄色的网站| 亚洲一二区在线观看| 免费看的av网站| 成人激情自拍| www.狠狠艹| 污污在线观看| 色综合一个色综合亚洲| 天天摸天天做天天爽水多| 韩国主播福利视频一区二区三区| 亚洲 欧美 国产 另类| 精品中文在线| 久久久久久欧美精品色一二三四| 日本视频在线免费| 麻豆亚洲av成人无码久久精品| 欧洲亚洲精品久久久久| 欧美videos另类齐全| 一区二区三区国产好的精华液| 欧美一区一区| 成人免费电影网址| 制服下的诱惑暮生| 成人午夜视频一区二区播放| 波多野在线观看| 亚洲人妻一区二区三区| 久久精品一区蜜桃臀影院| 国产精品9999| 亚洲午夜在线播放| 国产美女精品视频| 国产经典自拍视频在线观看| 日韩精品一区二区三区视频播放| 啪啪av大全导航福利综合导航| 欧美性色视频在线| 尤物免费看在线视频| 中文字幕第38页| 日韩一区二区三区高清在线观看| 粉色视频免费看| 男人和女人做事情在线视频网站免费观看| 992kp免费看片| 制服国产精品| 国语对白中文字幕| 少妇精品久久久久久久久久| 亚洲国产日韩在线一区| 国产精品男人的天堂| 免费激情视频网站| 天天综合色天天| 欧美日韩激情四射| 超碰影院在线| 26uuu另类欧美| 中文字幕一区二| 欧美1区2区| 久久精品国产91精品亚洲| 国精产品99永久一区一区| 日韩国产精品亚洲а∨天堂免| 国产免费一级| 亚洲精品欧美极品| 亚洲成人不卡| 美女又爽又黄免费动漫| 久久综合网络一区二区| 91香蕉视频在线播放| 欧美日韩一区二区区别是什么| 欧美三级欧美一级| 欧美xxx久久| 97国产精品人人爽人人做| 欧美性xxxx禁忌| 欧美高清视频免费观看| 99久久精品免费看国产交换| 韩国国内大量揄拍精品视频| 中文字幕 视频一区| 成年免费视频黄网站在线观看| 五月婷婷视频在线观看| 亚洲欧美欧美一区二区三区| 四虎影院免费在线| 91免费视频网站在线观看| 免费日韩电影| 黄色永久免费网站| 成人欧美一区二区三区视频xxx| 亚洲久久中文字幕| 日韩av电影手机在线观看| 欧美高清性hdvideosex| 欧美日韩精品免费观看视频| 宅男深夜免费观看视频| 久久精品视频中文字幕| 日韩精品另类天天更新| 亚洲xxxx做受欧美| 精品女同一区二区三区| 精品综合免费视频观看| 99热99这里只有精品| 久久精品亚洲乱码伦伦中文| 国产免费成人在线| 麻豆九一精品爱看视频在线观看免费| 免费福利电影| 九九热最新视频//这里只有精品|