引用賦值
$a = apple $b =
上述代碼中,我將一個字符串賦值給變量a,然后將a的引用賦值給了變量b。顯然,這個時候的內存指向應該是這樣的:
$a - apple - $b
a和b指向了同一塊內存區域,我們通過 var_dump($a, $b) 得到 string(5) apple string(5) apple ,這是我們預期的結果。
unset 函數
假如我想將 apple 這個字符串從內存中釋放掉。我是這么做的:
unset($a);
但是通過再次打印 $a $b 兩變量的信息,我得到了這樣的結果:Notice: Undefined variable: a 和 string(5) apple 。奇怪,$a $b 同時指向一塊內存區域,又明明將$a釋放了,為什么$b還是 apple 。
其實是這樣的,unset()這是將一個變量指針銷毀了,并沒有釋放掉那塊內存區域中存放的字符串,所以執行完操作之后,內存指向只是變成了這樣:
apple - $b
要牢記重點: unset()并沒有釋放變量所指向的那塊內存,而只是將變量指針銷毀了。同時,將那塊內存的 引用計數 減1,當引用計數為0時,也就是說當那塊內存不被任何變量引用時,便會觸發php的垃圾回收。
直接回收
那要怎樣做才能真正釋放掉 apple 所占用的內存呢?
利用上述方法,我們可以在 unset($a) 之后再 unset($b) ,將內存區域的所有引用都銷毀,引用計數減為0了,自然就被php回收了。
當然,還有更直接的方法:
$a = null;
直接賦值 null 會將將 $a 所指向的內存區域置空,并將引用計數歸零,內存便被釋放。
腳本執行結束
php是腳本語言,當腳本執行結束之后,腳本內使用的所有內存都會被釋放。
相關推薦:
掌握php垃圾回收機制
PHP內置的垃圾回收
PHP之垃圾回收機制詳解
以上就是PHP內存釋放以及垃圾回收詳解的詳細內容,其它編程語言
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。
新聞熱點
疑難解答