1、PHPzavl 及垃圾回收机制

一、PHPzavl

zavl包括 变量类型、值、is_ref和refcount字段

is_ref :(bool) 判断变量是否引用。

refcount :计数器。统计指向zavl变量容器的变量个数

is_ref和refcount的关系,当refcount 的值为1 is_ref 为false 。因为refcount为1 时 此变量不可能有多个别名,就不存在利用。

当原变量  = (赋值)给新变量时,原变量的 refcount +1 。

当原变量变化时,给新变量分配内存空间,refcount - 1。

当原变量unset 时 ,新变量直接使用原变量的zavl内容空间。

&引用赋值时,is_ref = 1 ,refcount + 1。给变量&引用赋值,之前赋值过的变量会分配内存空间

二、垃圾回收机制(Garbage Collection)

垃圾回收机制开启可以节省大量内存空间,但是会增加脚本运行时间。

php 5.3中使用专门的算法解决环状引用内存泄露的问题

判断zavl可能为垃圾,将zavl放入内存缓冲区,当缓冲区到达临界默认值(可修改配置),回收算法会遍历所有缓冲区的zavl,判断是否为垃圾,并进行释放处理

php 5.3的gc中实现步骤是:

1、如果一个zavl的refcount 增加,说明zavl正在使用,不是垃圾。不会放到缓冲区。

2、如果zavl的refcount减少到0 ,那么zavl会立即被释放掉。不属于gc要处理的对象,不会放入缓冲区。

3、如果zavl的refcount减少但是大于0,说明zavl还不能被释放,此zavl可能成为垃圾,将其放入缓冲区。

开启/关闭垃圾回收可以通过PHP配置实现,或者在程序中使用

gc_enable() / gs_disable()(开启/关闭)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值