下载此文档

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


文档分类:论文 | 页数:约7页 举报非法文档有奖
1/7
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/7 下载此文档
文档列表 文档介绍
Php引用计时器和垃圾回收机制.docxphp引用计数器和垃圾回收机制谈到引用计数器和垃圾回收机制,必须得从php变量说起。总所周知,php是一种弱类型,但具体表现在哪里,程序里面又是怎么表现的呢?php里面又是怎样实现引用计数器的,程序如何区分变量引用和复制?php是如何对己用完的变量进行回收,不同的php版本的不同的垃圾回收机制又是如何实现的?引用计数器讲到引用计数器,不得不先说一下变量的C语言实现。如下,几个变量的结构体和联合体:zvalue_value联合体:typedefunion_zvalue_value{longIval; /*longvalue*/doubledval;struct{/*doublevalue*/char*val;intlen;}str;HashTable*ht;/*hashtablevalue*/zend_object_valueobj;}zvalue_value;zval的结构:structzvalstruct{/*Variableinformation*/zvalue_valuevalue;/*value*/zend_uintrefcount―gc;zend_uchartype;/*activetype*/zend_ucharis_ref―gc;};zval可以看成一个容器,zvalue_value是该容器存储变量值的联合体,refcount―gc是引用计数,记录引用数,is_ref__gc是标志这个容器是否真正的引用,type表示这个变量的类型。zend根据type值來决定访问value的哪个成员,可川值如下:ISNULLN/AISLONG对应value」」:首先是PHP的数组其实就是一个HashTable,这就解释了为什么PHP能够支持关联数组了;其次,Resource就是一个long值,它里面存放的通常是个指针、一个内部数组的index或者其它什么只有创建者自己才知道的东西,可以将其视作一个handleo写复制(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分离(Separation)o这个机制就是所谓的copyonwrite(写时复制)。题外话:写时复制技术的一个比较有名的应用是在unix类操作系统内核中,当一个进程调用fork函数生成一个子进程的时候,父子进程拥有相同的地址空间内容,在老版本的系统中,子进程是在fork的时候就将父进程的地址空间中的内容都拷贝一份,对于规模较大的程序这个过程可能会有着很大的开销,更崩溃的是,很多进程在fork之后,直接在子进程中调用exec执行

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

非法内容举报中心
文档信息
  • 页数7
  • 收藏数0 收藏
  • 顶次数0
  • 上传人sssmppp
  • 文件大小49 KB
  • 时间2019-06-27