最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

總結(jié)PHP內(nèi)存釋放以及垃圾回收

 更新時(shí)間:2018年03月29日 14:31:37   作者:Xavier  
本篇文章給大家分享了關(guān)于PHP寫程序的小技巧,關(guān)于內(nèi)存釋放以及垃圾回收的相關(guān)問題,有興趣的朋友學(xué)習(xí)下。

引用賦值

$a = 'apple';
$b = &$a;

上述代碼中,我將一個(gè)字符串賦值給變量a,然后將a的引用賦值給了變量b。顯然,這個(gè)時(shí)候的內(nèi)存指向應(yīng)該是這樣的:

$a -> 'apple' <- $b

a和b指向了同一塊內(nèi)存區(qū)域,我們通過 var_dump($a, $b) 得到 string(5) "apple" string(5) "apple" ,這是我們預(yù)期的結(jié)果。

unset 函數(shù)

假如我想將 'apple' 這個(gè)字符串從內(nèi)存中釋放掉。我是這么做的:

unset($a);

但是通過再次打印 $a $b 兩變量的信息,我得到了這樣的結(jié)果:Notice: Undefined variable: a 和 string(5) "apple" 。奇怪,$a $b 同時(shí)指向一塊內(nèi)存區(qū)域,又明明將$a釋放了,為什么$b還是'apple'。

其實(shí)是這樣的,unset()這是將一個(gè)變量指針銷毀了,并沒有釋放掉那塊內(nèi)存區(qū)域中存放的字符串,所以執(zhí)行完操作之后,內(nèi)存指向只是變成了這樣:

'apple' <- $b

要牢記重點(diǎn): unset()并沒有釋放變量所指向的那塊內(nèi)存,而只是將變量指針銷毀了。同時(shí),將那塊內(nèi)存的 引用計(jì)數(shù) 減1,當(dāng)引用計(jì)數(shù)為0時(shí),也就是說當(dāng)那塊內(nèi)存不被任何變量引用時(shí),便會(huì)觸發(fā)php的垃圾回收。

直接回收

那要怎樣做才能真正釋放掉 'apple' 所占用的內(nèi)存呢?

利用上述方法,我們可以在 unset($a) 之后再 unset($b) ,將內(nèi)存區(qū)域的所有引用都銷毀,引用計(jì)數(shù)減為0了,自然就被php回收了。

當(dāng)然,還有更直接的方法:

$a = null;

直接賦值 null 會(huì)將將 $a 所指向的內(nèi)存區(qū)域置空,并將引用計(jì)數(shù)歸零,內(nèi)存便被釋放。

腳本執(zhí)行結(jié)束

php是腳本語(yǔ)言,當(dāng)腳本執(zhí)行結(jié)束之后,腳本內(nèi)使用的所有內(nèi)存都會(huì)被釋放。

相關(guān)文章

最新評(píng)論

丰都县| 鸡西市| 徐州市| 嘉祥县| 育儿| 泾阳县| 蕉岭县| 乐亭县| 太和县| 宾川县| 北票市| 新泰市| 塔城市| 乌什县| 康平县| 永新县| 常宁市| 鹰潭市| 义乌市| 汾阳市| 满城县| 镇坪县| 洛南县| 师宗县| 贡嘎县| 望城县| 济南市| 阿尔山市| 靖宇县| 中牟县| 岳西县| 涿鹿县| 资兴市| 娄烦县| 隆昌县| 齐齐哈尔市| 乐安县| 拉孜县| 新疆| 鄂州市| 聂拉木县|