Board logo

标题: php底层原理之垃圾回收机制(1) [打印本页]

作者: look_w    时间: 2019-4-12 16:40     标题: 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结构,这里不再表述




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0