首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

php底层原理之垃圾回收机制(1)

php底层原理之垃圾回收机制(1)

php垃圾回收机制,对于PHPer来说是一个不陌生但是又不是很熟悉的内容。那么php是怎么实现对不需要的内存进行回收的呢?
php变量的内部存储结构

首先还是需要了解下基础知识,便于垃圾回收原理内容的理解。大家都知道php是由C编写而成的,所以php变量的内部存储结构也会和C语言相关,即zval的结构体:

    struct _zval_struct {
        union {
            long lval;
            double dval;
            struct {
                char *val;
                int len;
            } str;
            HashTable *ht;
            zend_object_value obj;
            zend_ast *ast;
        } value;                    //变量value值
        zend_uint refcount__gc;   //引用计数内存中使用次数,为0删除该变量
        zend_uchar type;           //变量类型
        zend_uchar is_ref__gc;    //区分是否是引用变量
    };
    复制代码

从上面结构体内容可以看出每一个php变量都会由变量类型、value值、引用计数次数和是否是引用变量四部分组成

注:上面zval结构体是php5.3版本之后的结构,php5.3之前因为没有引入新的垃圾回收机制,即GC,所以命名也没有_gc;而php7版本之后由于性能问题所以改写了zval结构,这里不再表述
返回列表