php垃圾回收

Example #1 生成一個新的zval容器 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信息 spa

<?php
xdebug_debug_zval
('a');
?>

以上例程會輸出: .net

a: (refcount=1, is_ref=0)='new string'

把一個變量賦值給另外一變量將增長引用次數(refcount). debug

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

<?php
$a 
"new string";
$b $a;
xdebug_debug_zval'a' );
?>

以上例程會輸出: orm

a: (refcount=2, is_ref=0)='new string'

這時,引用次數是2,由於同一個變量容器被變量 a 和變量 b關聯.當不必時,php不會去複製已生成的變量容器。變量容器在」refcount「變成0時就被銷燬. 當任何關聯到某個變量容器的變量離開它的做用域(好比:函數執行結束),或者對變量調用了函數 unset()時,」refcount「就會減1,下面的例子就能說明: 內存

Example #4 減小引用計數 作用域

<?php
$a 
"new string";
$c $b $a;
xdebug_debug_zval'a' );
unset( 
$b$c );
xdebug_debug_zval'a' );
?>

以上例程會輸出: get

a: (refcount=3, is_ref=0)='new string'
a: (refcount=1, is_ref=0)='new string'

若是咱們如今執行 unset($a);,包含類型和值的這個變量容器就會從內存中刪除。

相關文章
相關標籤/搜索