使用的是“引用計數”方式進行回收。簡單地理解的話,就是每個分配的內存區域都有一個計數器,記錄有多少個變量指針指向這片內存。當指向該片內存的指針數量為0,那么該片內存區域就可以被回收。
引用計數計數簡單,強大,但是有一個致命的缺陷,就是環狀引用。考慮以下的代碼:
Php代碼
$a = array();
$a[] = &$a;
unset($a);
變量$a引用了自己,形成了一個環。$a被unset了,可是由于存在環狀引用,因此$a之前指向的內存的引用計數為1,因此該內存區域不會被垃圾回收機制回收。
PHP5.3針對這個重大的缺陷做了優化。雖然其基礎仍然是引用計數,但是在做了一些改良,能夠將環狀引用導致的內存泄露控制在一定的規模以內。當然,這并不是說你可以隨便濫用內存,編寫代碼時仍然要小心為上!
其他要點:
1.PHP腳本運行完畢,該腳本申請的所有內存空間都會釋放,不管是否存在環狀引用。因此環狀引用內存泄露的問題一般只影響長時間運行的程序腳本。
2.垃圾回收機制需要滿足一定的條件才會執行。因此unset后,系統并不一定會立即回收垃圾。
3.unset的作用。
“unset只是斷開一個變量到一塊內存區域的連接,同時將該內存區域的引用計數-1”。也就是說,如果有一個以上的變量指向同一個內存區域,或者存在環狀引用,那么unset不會使內存區域釋放。斷開也說明unset并不會直接刪除內存區域,而只是改變其引用計數而已。
4.$xx=null的作用。
“$a = null 是直接將$a 指向的數據結構置空,同時將其引用計數歸0”。根據我對這個定義的理解,=null操作可以立即釋放掉內存空間!因此很多PHP技巧中不厭其煩地對我們說,先將變量設為null,再unset。理解其深層原理后,我才徹底理解了這樣做的原因!=null才是王道!
另外有需要云服務器可以了解下創新互聯cdcxhl.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業上云的綜合解決方案,具有“安全穩定、簡單易用、服務可用性高、性價比高”等特點與優勢,專為企業上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。
標題名稱:PHP垃圾回收機制理解-創新互聯
文章鏈接:http://newbst.com/article30/doospo.html
成都網站建設公司_創新互聯,為您提供移動網站建設、自適應網站、企業網站制作、網站設計、App開發、網站制作
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯