php垃圾回收機制實例介紹

發布: 2023-04-08 13:32:01
轉載
3346 人瀏覽過

php垃圾回收機制實例介紹

<?php
$a = "new string";
?>
登入後複製

在上例中,新的變數a,是在目前作用域中產生的。並且產生了類型為 string 和值為new string的變數容器。在額外的兩個位元組資訊中,"is_ref"被預設為 FALSE,因為沒有任何自訂的引用產生。

"refcount" 設定為 1,因為這裡只有一個變數使用這個變數容器。注意到當"refcount"的值是1時,"is_ref"的值總是FALSE. 如果你已經安裝了» Xdebug,你能透過呼叫函數 xdebug_debug_zval()來顯示"refcount"和"is_ref"的值。

Example #2 顯示zval訊息

<?php
xdebug_debug_zval(&#39;a&#39;);
?>
登入後複製

以上例程會輸出:

a: (refcount=1, is_ref=0)=&#39;new string&#39;
登入後複製

把一個變數賦值給另一個變數會增加引用次數(refcount).

Example #3 增加一個zval的引用計數

<?php
$a = "new string";
$b = $a;
xdebug_debug_zval( &#39;a&#39; );
?>
登入後複製

以上例程會輸出:

a: (refcount=2, is_ref=0)=&#39;new string&#39;
登入後複製

這時,引用次數是2,因為同一個變數容器被變數 a 和變數 b關聯.當沒必要時,php不會去複製已產生的變數容器。

變數容器在」refcount「變成0時就被銷毀. 當任何關聯到某個變數容器的變數離開它的作用域(例如:函數執行結束),或是對變數呼叫了函數 unset ()時,」refcount「就會減少1,下面的例子就能說明:

Example #4 減少引用計數

<?php
$a = "new string";
$c = $b = $a;
xdebug_debug_zval( &#39;a&#39; );
unset( $b, $c );
xdebug_debug_zval( &#39;a&#39; );
?>
登入後複製

以上例程會輸出:

a: (refcount=3, is_ref=0)='new string'
a: (refcount=1, is_ref=0)=&#39;new string&#39;
登入後複製

如果我們現在執行 unset($a);,包含類型和值的這個變數容器就會從記憶體中刪除。

相關推薦:

PHP影片教學://m.sbmmt.com/course/list/29/type/2.html

以上是php垃圾回收機制實例介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
php
來源:oschina.net
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!