1、引用计数器
php中的每个变量都存在一个zval的变量容器中,
zval容易包括变量类型、值、is_ref(是否是引用)、refercount(引用次数,也成为符号),
所有的符号存在一个符号表中,每个符号都有作用域(scope)
当一个变量被赋常量值时,就会生成一个zval变量容器
//当一个变量被赋常量值时,就会生成一个zval变量容器 $a = "new string"; xdebug_debug_zval(‘a‘); //a: (refcount=1, is_ref=0)=‘new string‘
//把一个变量赋值给另一变量将增加引用次数(refcount). $a = "new string"; $b = $a; xdebug_debug_zval( ‘a‘ ); a: (refcount=2, is_ref=0)=‘new string‘
//当没必要时,php不会去复制已生成的变量容器 $a = 1; xdebug_debug_zval(‘a‘); #(refcount=1, is_ref=0),int 1 $b = $a; xdebug_debug_zval(‘a‘); #(refcount=2, is_ref=0),int 1 $b = 3; xdebug_debug_zval(‘a‘); #(refcount=1, is_ref=0),int 1
2、回收周期(Collecting Cycles)
原文地址:http://www.php.net/manual/zh/features.gc.refcounting-basics.php