下载此文档

Php引用计时器和垃圾回收机制.doc


文档分类:论文 | 页数:约7页 举报非法文档有奖
1/7
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/7 下载此文档
文档列表 文档介绍
谈到引用计数器和垃圾回收机制,必须得从php变量说起。总所周知,php是一种弱类型,但具体表现在哪里,程序里面又是怎么表现的呢?php里面又是怎样实现引用计数器的,程序如何区分变量引用和复制?php是如何对已用完的变量进行回收,不同的php版本的不同的垃圾回收机制又是如何实现的?引用计数器讲到引用计数器,不得不先说一下变量的c语言实现。如下,几个变量的结构体和联合体:zvalue_value联合体:typedef union _zvalue_value {   long lval;                  /* long value */   double dval;                /* double value */ struct { char *val;   int len; } str; HashTable *ht;              /* hash table value */   zend_object_value obj; } zvalue_value; zval的结构:struct _zval_struct {   /* Variable information */   zvalue_value value;      /* value */ zend_uint refcount__gc;   zend_uchar type;    /* active type */   zend_uchar is_ref__gc; };  zval可以看成一个容器,zvalue_value是该容器存储变量值的联合体,refcount__gc是引用计数,记录引用数,is_ref__gc是标志这个容器是否真正的引用,type表示这个变量的类型。zend根据type值来决定访问value的哪个成员,可用值如下:IS_NULLN/:首先是PHP的数组其实就是一个HashTable,这就解释了为什么PHP能够支持关联数组了;其次,Resource就是一个long值,它里面存放的通常是个指针、一个内部数组的index或者其它什么只有创建者自己才知道的东西,可以将其视作一个handle。写复制(CopyonWrite)<?php  $var="laruence";$var_dup=$var;$var=1;?>PHP在修改一个变量以前,会首先查看这个变量的refcount,如果refcount大于1,PHP就会执行一个分离的例程,对于上面的代码,当执行到第三行的时候,PHP发现$var指向的zval的refcount大于1,那么PHP就会复制一个新的zval出来,将原zval的refcount减1,并修改symbol_table,使得$var和$var_dup分离(Separation)。这个机制就是所谓的copyonwrite(写时复制)。题外话:写时复制技术的一个比较有名的应用是在unix类操作系统内核中,当一个

Php引用计时器和垃圾回收机制 来自淘豆网www.taodocs.com转载请标明出处.

非法内容举报中心
文档信息
  • 页数7
  • 收藏数0 收藏
  • 顶次数0
  • 上传人x11gw27s
  • 文件大小80 KB
  • 时间2020-01-03