作家
登录

PHP的垃圾回收机制——引用计数

作者: 来源: 2017-10-12 13:37:08 阅读 我要评论


PHP的垃圾收受接收机制——引用计数

每个php变量存在一个叫"zval"的变量容器中。一个zval变量容器,除了包含变量的类型和值,还包含两个字节的额外信息。第一个是"is_ref",是个bool值,用来标识这个变量是否是属于引用集合(reference set)。经由过程这个字节,php引擎才能把通俗变量和引用变量区分开来,因为php许可用户经由过程应用&来应用自定义引用,zval变量容器中还有一个内部引用计数机制,来竽暌古化内存应用。第二个额外字节是"refcount",用以表示指向这个zval变量容器的变量(也称符号即symbol)个数。所有的符号存在一个符号表中,个中每个符号都有感化域(scope),那些主脚本(比如:经由过程浏览器请求的的脚本)和每个函数或者办法也都有感化域。

当一个变量被赋常量值瓯,就会生成一个zval变量容器,如下例如许:

例1 生成一个新的zval容器

  1. <?php  
  2.  
  3. $a = "new string"
  4.  
  5. ?> 

在上例中,新的变量a,是在当缁?用域中生成的。并且生成潦攀类型为 string 和值为new string的变量容器。在额外的两个字节信息中,"is_ref"被默认设置为 FALSE,因为没有任何自定义的引用生成。"refcount" 被设定为 1,因为这里只有一个变量应用这个变量容器. 留意到当"refcount"的值是1时,"is_ref"的值老是FALSE. 如不雅你已经安装了» Xdebug,你能经由过程调用函数 xdebug_debug_zval()显示"refcount"和"is_ref"的值。

例2 显示zval信息

  1. <?php  
  2.  
  3. xdebug_debug_zval('a'); 
  4.  
  5. ?> 

以上例程会输出:

  1. a: (refcount=1, is_ref=0)=array ( 
  2.  
  3. 'life' => (refcount=1, is_ref=0)='life' 
  4.  
  1. a: (refcount=1, is_ref=0)='new string' 

把一个变量赋值给另一变量将增长引用次数(refcount).

例3 增长一个zval的引用计数

  1. <?php 
  2.  $a = "new string"
  3.  
  4. $b = $a; 
  5.  
  6. xdebug_debug_zval( 'a' ); 
  7.  
  8. ?> 

以上例程会输出:

这时,引用次数是2,因为同一个变量容器被变量 a 和变量 b接洽关系.当没须要时,php不会去复制已生成的变量容器。变量容器在”refcount“变成0时就被烧毁. 当任何接洽关系到某个变量容器的变量分开它的感化域(比如:函数履行停止),或者对变量调用了函数 unset()时,”refcount“就会减1,下面的例子就能解释:

例4 削减引用计数

  1. <?php  
  2.  
  3. $a = "new string"
  4.  
  5. $c = $b = $a; 
  6.  
  7. xdebug_debug_zval( 'a' ); 
  8.  
  9. unset( $b, $c ); 
  10.  
  11. xdebug_debug_zval( 'a' ); 
  12.  
  13. ?> 

以上例程会输出:

如不雅我们如今履行 unset($a);,包含类型和值的┞封个变量容器就会大年夜内存中删除。

复合类型(Compound Types)

当推敲像 array和object如许的复合类型时,工作就稍微有点复杂. 与 标量(scalar)类型的值不合,array和 object类型的变量把它们的成员或属性存在本身的符号表中。这意味着下面的例子将生成三个zval变量容器。


  推荐阅读

  阿里巴巴发布AliGenie语音开放平台 “智联网”战略又落一子

10月12日消息,在2017杭州&bull;云栖大年夜会上,阿里巴巴人工智能实验室宣布了AliGenie 开放平台,重要包含三大年夜部分:精灵技能市场、硬件开放平台、行业解决筹划,周全赋能智能家居、>>>详细阅读


本文标题:PHP的垃圾回收机制——引用计数

地址:http://www.17bianji.com/lsqh/37855.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)