日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

PHP垃圾回收机制理解

發(fā)布時間:2025/3/15 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 PHP垃圾回收机制理解 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

使用的是“引用計數(shù)”方式進行回收。簡單地理解的話,就是每個分配的內存區(qū)域都有一個計數(shù)器,記錄有多少個變量指針指向這片內存。當指向該片內存的指針數(shù)量為0,那么該片內存區(qū)域就可以被回收。
?
引用計數(shù)計數(shù)簡單,強大,但是有一個致命的缺陷,就是環(huán)狀引用??紤]以下的代碼:
?
Php代碼?
$a = array();?
$a[] = &$a;?
unset($a);?


變量$a引用了自己,形成了一個環(huán)。$a被unset了,可是由于存在環(huán)狀引用,因此$a之前指向的內存的引用計數(shù)為1,因此該內存區(qū)域不會被垃圾回收機制回收。
?
?
PHP5.3針對這個重大的缺陷做了優(yōu)化。雖然其基礎仍然是引用計數(shù),但是在做了一些改良,能夠將環(huán)狀引用導致的內存泄露控制在一定的規(guī)模以內。當然,這并不是說你可以隨便濫用內存,編寫代碼時仍然要小心為上!
?
?
其他要點:
1.PHP腳本運行完畢,該腳本申請的所有內存空間都會釋放,不管是否存在環(huán)狀引用。因此環(huán)狀引用內存泄露的問題一般只影響長時間運行的程序腳本。
?
2.垃圾回收機制需要滿足一定的條件才會執(zhí)行。因此unset后,系統(tǒng)并不一定會立即回收垃圾。
?
3.unset的作用。
“unset只是斷開一個變量到一塊內存區(qū)域的連接,同時將該內存區(qū)域的引用計數(shù)-1”。也就是說,如果有一個以上的變量指向同一個內存區(qū)域,或者存在環(huán)狀引用,那么unset不會使內存區(qū)域釋放。斷開也說明unset并不會直接刪除內存區(qū)域,而只是改變其引用計數(shù)而已。
?
4.$xx=null的作用。
“$a = null 是直接將$a 指向的數(shù)據(jù)結構置空,同時將其引用計數(shù)歸0”。根據(jù)我對這個定義的理解,=null操作可以立即釋放掉內存空間!因此很多PHP技巧中不厭其煩地對我們說,先將變量設為null,再unset。理解其深層原理后,我才徹底理解了這樣做的原因!=null才是王道!

轉載于:https://www.cnblogs.com/zhangyuhang3/p/6873619.html

總結

以上是生活随笔為你收集整理的PHP垃圾回收机制理解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。