【180】php的垃圾回收机制

PHP 的垃圾回收机制
软件开发中的垃圾回收机制是一种自动打扫和清除内存垃圾技术,它可以有效防范动态内存分配中可能发生的危险:
1.因内容垃圾过多而引发的内存耗尽。
2.不恰当的内存释放所造成的内存非法引用。
在PHP5.2及更早版本的PHP中,没有专门的垃圾回收器GC(Garbage Collection) ,引擎在判断一个变量空间是否能够被释放的时候是依据这个变量的zval的refcount的值,如果refcount为0,那么变量的空间可以被释放,否则就不是放,这是一种非常简单的GC实现。然而在这种简单的GC实现方案中,出现了意想不到的变量内存泄漏情况,引擎将无法回收这些内存,于是在php5.3 中出现了新的GC,新的GC有专门的机制负责清理垃圾数据,防止内存泄漏。

1.引用计数基本知识

每个php变量存在一个叫"zval"的变量容器中。
一个zval变量容器,除了包含变量的类型和值,还包括两个字节的额外信息。第一个是"is_ref",是个bool值,用来标识这个变量是否是属于引用集合(reference set)。
通过这个字节,php引擎才能把普通变量和引用变量区分开来,由于php允许用户通过使用&来使用自定义引用,zval变量容器中还有一个内部引用计数机制,来优化内存使用。第二个额外字节是"refcount",用以表示指向这个zval变量容器的变量(也称符号即symbol)个数。
所有的符号存在一个符号表中,其中每个符号都有作用域(scope),那些主脚本(比如:通过浏览器请求的的脚本)和每个函数或者方法也都有作用域。
在这里插入图片描述

删除数组中的一个元素,就是类似于从作用域中删除一个变量. 删除后,数组中的这个元素所在的容器的“refcount”值减少,同样,当“refcount”为0时,这个变量容器就从内存中被删除

2. 回收周期(Collecting Cycles)

3. 性能方面考虑的因素

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值