php如何进行垃圾回收,php 的垃圾回收策略

这篇博客详细介绍了PHP内部如何使用zval结构来存储各种类型的数据,并且重点讲解了zval中的refcount和is_ref字段的作用。refcount表示引用计数,用于管理内存,而is_ref标识变量是否为引用。通过xdebug_debug_zval函数,可以查看变量的完整信息,例如$a的refcount=1,is_ref=0,表明它是一个未被引用的字符串。
摘要由CSDN通过智能技术生成

所有的 php 类型在 php 内部都是用一个 zval 结构存储的,下面是 zval 的存储结构 _zval_struct:

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;

struct _zval_struct {

zvalue_value value;

zend_uint refcount__gc;

zend_uchar type; /* active type */

zend_uchar is_ref__gc;

};

其中联合体“_zvalue_value”用于表示PHP中所有变量的值,这里之所以使用union,是因为一个zval在一个时刻只能表示一种类型的变量

可以看到,_zval_struct 中除了 zvalue_value 类型的变量值和 zend_uchar 类型的变量类型数据以外,还存储了 refcount__gc 和 is_ref__gc 两个字段is_ref -- is_ref 是一个 bool 类型的值,他用来标识该变量是否属于引用集合(reference set)

refcount -- 引用计数器

查看变量完整信息

通过 xdebug_debug_zval 函数可以查看变量的完整信息:

$a = "new string";

xdebug_debug_zval('a');

?>

打印出了:

a: (refcount=1, is_ref=0)='new string'

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值