PHP垃圾回收机制引用计数器概念分析


Posted in PHP onJune 24, 2013

如果你安装了xdebug,就可以用xdebug_debug_zval()显示“zval”的信息了。如下:

<?php
$str = "3water.com";
xdebug_debug_zval('str');

结果:

str:
(refcount=1, is_ref=0),
string '3water.com' (length=10)

只有当变量容器在”refcount“变成0时就被销毁.当你unset()一个变量时,想要的“zval”中refcount就会减1,再来说说前几天遇到的unset引用问题:

<?php
$a = "aaa";
$b = & $a;
unset($a);
//echo $b; //这里依然会输出aaa,用xdebug_debug_zval打印你就知道为什么了
xdebug_debug_zval("b");

结果:

b:
(refcount=1, is_ref=0),string 'aaa' (length=3)
继续说引用计数器问题,对于array和object符合类型情况又不一样了:

<?php
$arr = array( 'a' => 'aaa', 'b' => "bbb" );
xdebug_debug_zval( 'arr' );
$arr['aaa'] = $arr['a'];
xdebug_debug_zval( 'arr' );
?>

结果:

arr:
(refcount=1, is_ref=0),
array
  'a' => (refcount=1, is_ref=0),string 'aaa' (length=3)
  'b' => (refcount=1, is_ref=0),string 'bbb' (length=3)
arr:
(refcount=1, is_ref=0),
array
  'a' => (refcount=2, is_ref=0),string 'aaa' (length=3)
  'b' => (refcount=1, is_ref=0),string 'bbb' (length=3)
  'aaa' => (refcount=2, is_ref=0),string 'aaa' (length=3)

可以看到看到原有的数组元素和新添加的数组元素关联到同一个"refcount"2的zval变量容器.这里我也只是起到抛砖引玉的作用。

具体关于PHP引用计数器可以参照手册:http://php.net/manual/zh/features.gc.refcounting-basics.php

PHP 相关文章推荐
PHP第一季视频教程(李炎恢+php100 不断更新)
May 29 PHP
PHP 实现explort() 功能的详解
Jun 20 PHP
php检测用户是否用手机(Mobile)访问网站的类
Jan 09 PHP
PHP实现显示照片exif信息的方法
Jul 11 PHP
自己写的php curl库实现整站克隆功能
Feb 12 PHP
PHP获取数组最大值下标的方法
May 12 PHP
WordPress中创建用户角色的相关PHP函数使用详解
Dec 25 PHP
Yii中的relations数据关联查询及统计功能用法详解
Jul 14 PHP
php中static 静态变量和普通变量的区别
Dec 01 PHP
动态表单验证的操作方法和TP框架里面的ajax表单验证
Jul 19 PHP
Laravel框架实现文件上传的方法分析
Sep 29 PHP
通过PHP的Wrapper无缝迁移原有项目到新服务的实现方法
Apr 02 PHP
PHP随机字符串生成代码(包括大小写字母)
Jun 24 #PHP
PHP 读取大文件的X行到Y行内容的实现代码
Jun 24 #PHP
解析在PHP中使用全局变量的几种方法
Jun 24 #PHP
探讨:array2xml和xml2array以及xml与array的互相转化
Jun 24 #PHP
解析Ubuntu下crontab命令的用法
Jun 24 #PHP
关于crontab的使用详解
Jun 24 #PHP
解析PHPExcel使用的常用说明以及把PHPExcel整合进CI框架的介绍
Jun 24 #PHP
You might like
CakePHP框架Model函数定义方法示例
2017/08/04 PHP
PHP自动载入类文件函数__autoload的使用方法
2019/03/25 PHP
JavaScript DOM 添加事件
2009/02/14 Javascript
人人网javascript面试题 可以提前实现下
2012/01/05 Javascript
jQuery之自动完成组件的深入解析
2013/06/19 Javascript
jQuery对象的length属性用法实例
2014/12/27 Javascript
JS实用的动画弹出层效果实例
2015/05/05 Javascript
javascript基于DOM实现省市级联下拉框的方法
2015/05/14 Javascript
jQuery实现文本展开收缩特效
2015/06/03 Javascript
举例讲解JavaScript中将数组元素转换为字符串的方法
2015/10/25 Javascript
javascript实现2016新年版日历
2016/01/25 Javascript
jQuery xml字符串的解析、读取及查找方法
2016/03/01 Javascript
使用jQuery或者原生js实现鼠标滚动加载页面新数据
2016/03/06 Javascript
Javascript将数值转换为金额格式(分隔千分位和自动增加小数点)
2016/06/22 Javascript
jQuery.ajax实现根据不同的Content-Type做出不同的响应
2016/11/03 Javascript
百度搜索框智能提示案例jsonp
2016/11/28 Javascript
总结几道关于Node.js的面试问题
2017/01/11 Javascript
Node.js中用D3.js的方法示例
2017/01/16 Javascript
React中常见的动画实现的几种方式
2018/01/10 Javascript
原生JS实现的简单轮播图功能【适合新手】
2018/08/17 Javascript
vue移动端屏幕适配详解
2019/04/30 Javascript
微信小程序如何自定义table组件
2019/06/29 Javascript
Vue基于iview实现登录密码的显示与隐藏功能
2020/03/06 Javascript
微信小程序 获取手机号 JavaScript解密示例代码详解
2020/05/14 Javascript
Python装饰器decorator用法实例
2014/11/10 Python
在Python的Flask框架中使用日期和时间的教程
2015/04/21 Python
Python迭代器与生成器用法实例分析
2018/07/09 Python
美国运动鞋和运动服零售商:Footaction
2017/04/07 全球购物
英国最全面的橄榄球联盟门票网站:Live Rugby Tickets
2018/10/06 全球购物
小米乌克兰网上商店:Xiaomi.UA
2019/10/29 全球购物
怎样填写就业意向
2014/04/02 职场文书
企业文化标语口号
2014/06/09 职场文书
工地质量标语
2014/06/12 职场文书
2019年度开业庆典祝福语大全!
2019/07/05 职场文书
如何使用Maxwell实时同步mysql数据
2021/04/08 MySQL
python三子棋游戏
2022/05/04 Python