PHP进阶篇

PHP生命周期
php总共三个模块:内核、zend引擎、以及扩展层
php生命周期有五个阶段:
1、模块初始化阶段
2、请求初始化阶段
3、脚本执行阶段
4、请求关闭阶段
5、模块关闭阶段

PHP垃圾回收机制
在php中变量占用的空间,是不需要我们手动回收的,它会自动释放程序不再需要的已分配的内存块,这就是PHP垃圾回收机制(GC机制)。

在理解GC之前,先了解下php的变量在底层的实现,php中变量存在于一个zval的变量容器中,结构:变量名、值、is_ref、refcount。
is_ref:是个bool值,用来区分变量是否属于引用集合(用&形式赋值)。
refcount:计数器,表示指向这个zval变量容器的变量个数。

php5.3版本之前的垃圾回收机制

1、每个内存对象都分配一个计数器,当内存对象被变量引用时,计数器+1;
2、当删除变量时(unset()),计数器-1;
3、当计数器=0时,表明内存对象没有被使用,该内存对象则进行销毁,垃圾回收完成。

循环引用引发的内存泄露问题
php5.3版本之前的垃圾回收机制存在一个漏洞,即当数组或对象内部子元素引用其父元素,而此时如果删除父元素,此变量容器并不会被删除,这时候,这一组内存对象已经没用了,但是不能回收,从而导致内存泄露的现象。

$a = array( 'one' );
$a[] = &$a;
unset($a);

新的垃圾回收机制
php5.3版本之后在引用计数的基础上,引入了根缓冲机制,即php启动时默认设置指定zval数量的根缓冲区(默认是10000),把计数减-1大于0的变量投入到根缓冲区,当根缓冲区塞满后,使用深度遍历算法进行垃圾回收,以此解决循环引用导致的内存泄漏问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值