搜尋
首頁微信小程式小程式開發PHP記憶體釋放以及垃圾回收詳解

PHP記憶體釋放以及垃圾回收詳解

Mar 30, 2018 am 10:00 AM
php回收垃圾

本文主要給大家分享了關於PHP寫程式的小技巧,關於記憶體釋放以及垃圾回收的相關問題,有興趣的朋友學習下,希望能幫助到大家。

引用賦值


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

在上述程式碼中,我將一個字串賦值給變數a,然後將a的引用賦值給了變數b。顯然,這個時候的記憶體指向應該是這樣的:


$a -> &#39;apple&#39; <- $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()這是將一個變數指標銷毀了,並沒有釋放掉那塊記憶體區域中存放的字串,所以執行完操作之後,記憶體指向只是變成了這樣:


&#39;apple&#39; <- $b

要牢記重點: unset()並沒有釋放變數所指向的那塊內存,而只是將變數指標銷毀了。同時,將那塊記憶體的 引用計數 減1,當引用計數為0時,也就是說當那塊記憶體不被任何變數引用時,便會觸發php的垃圾回收。

直接回收

那要怎麼做才能真正釋放掉 'apple' 所佔用的記憶體呢?

利用上述方法,我們可以在 unset($a) 之後再 unset($b) ,將記憶體區域的所有引用都銷毀,引用計數減為0了,自然就被php回收了。

當然,還有更直接的方法:


$a = null;

#直接賦值null 會將$a 指向的記憶體區域置空,並將引用計數歸零,記憶體便被釋放。

腳本執行結束

php是腳本語言,當腳本執行結束之後,腳本內使用的所有記憶體都會被釋放。

相關推薦:

掌握php垃圾回收機制

PHP內建的垃圾回收

#PHP之垃圾回收機制詳解


以上是PHP記憶體釋放以及垃圾回收詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版