91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

PHP垃圾回收機制理解

發布時間:2020-08-13 18:36:49 來源:網絡 閱讀:486 作者:new個對象 欄目:web開發

使用的是“引用計數”方式進行回收。簡單地理解的話,就是每個分配的內存區域都有一個計數器,記錄有多少個變量指針指向這片內存。當指向該片內存的指針數量為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才是王道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

资源县| 河源市| 邻水| 壶关县| 微山县| 尚义县| 保亭| 城口县| 延吉市| 营口市| 黄冈市| 呼和浩特市| 乐平市| 龙山县| 乐都县| 阳城县| 兴山县| 田林县| 嘉黎县| 庆城县| 前郭尔| 宜兰市| 靖远县| 土默特左旗| 永定县| 龙海市| 张家口市| 五家渠市| 富宁县| 菏泽市| 清徐县| 湘西| 武冈市| 龙岩市| 类乌齐县| 信宜市| 顺平县| 屏山县| 汾阳市| 巫溪县| 泽普县|