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 strtok()函数的优点分析
Mar 02 PHP
php的urlencode()URL编码函数浅析
Aug 09 PHP
不支持fsockopen但支持culr环境下下ucenter与modoer通讯问题
Aug 12 PHP
php牛逼的面试题分享
Jan 18 PHP
优化PHP代码技巧的小结
Jun 02 PHP
php正则取img标记中任意属性(正则替换去掉或改变图片img标记中的任意属性)
Aug 13 PHP
PHP中的闭包(匿名函数)浅析
Feb 07 PHP
Yii实现简单分页的方法
Apr 29 PHP
PHP 将数组打乱 shuffle函数的用法及简单实例
Jun 17 PHP
深入理解PHP类的自动载入机制
Sep 16 PHP
PHP实现的redis主从数据库状态检测功能示例
Jul 20 PHP
PHP简单实现欧拉函数Euler功能示例
Nov 06 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
php 无法加载mysql的module的时候的配置的解决方案引发的思考
2012/01/27 PHP
详解php中serialize()和unserialize()函数
2017/07/08 PHP
利用PHP扩展Xhprof分析项目性能实践教程
2018/09/05 PHP
Laravel创建数据库表结构的例子
2019/10/09 PHP
Thinkphp 框架扩展之类库扩展操作详解
2020/04/23 PHP
分享精心挑选的12款优秀jQuery Ajax分页插件和教程
2012/08/09 Javascript
javascript重复绑定事件造成的后果说明
2013/03/02 Javascript
jQuery中unwrap()方法用法实例
2015/01/16 Javascript
JavaScript设置表单上传时文件个数的方法
2015/08/11 Javascript
js实现无限级树形导航列表效果代码
2015/09/23 Javascript
js鼠标按键事件和键盘按键事件用法实例汇总
2016/10/03 Javascript
javascript实现延时显示提示框效果
2017/06/01 Javascript
js学习总结之dom2级事件基础知识详解
2017/07/27 Javascript
vue mint-ui 实现省市区街道4级联动示例(仿淘宝京东收货地址4级联动)
2017/10/16 Javascript
详解vuex中mapState,mapGetters,mapMutations,mapActions的作用
2018/04/13 Javascript
微信小程序使用for循环动态渲染页面操作示例
2018/12/25 Javascript
Vue核心概念Getter的使用方法
2019/01/18 Javascript
帮你彻底搞懂JS中的prototype、__proto__与constructor(图解)
2019/08/23 Javascript
JavaScript中的相等操作符使用详解
2019/12/21 Javascript
[04:04]DOTA2亚洲邀请赛比赛场馆&酒店全攻略
2017/03/23 DOTA
详解python脚本自动生成需要文件实例代码
2017/02/04 Python
Python魔法方法功能与用法简介
2019/04/04 Python
django ManyToManyField多对多关系的实例详解
2019/08/09 Python
Python+OpenCV+图片旋转并用原底色填充新四角的例子
2019/12/12 Python
Python configparser模块操作代码实例
2020/06/08 Python
Pycharm打开已有项目配置python环境的方法
2020/07/03 Python
Python如何设置指定窗口为前台活动窗口
2020/08/12 Python
python3环境搭建过程(利用Anaconda+pycharm)完整版
2020/08/19 Python
python里glob模块知识点总结
2021/01/05 Python
python requests库的使用
2021/01/06 Python
英国第一豪华护肤品牌:Elemis
2017/10/12 全球购物
Windows和Linux动态库应用异同
2016/07/28 面试题
学年末自我鉴定
2014/01/21 职场文书
2013年研究生毕业感言
2014/02/06 职场文书
第二批党的群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
2016年社区服务活动总结
2016/04/06 职场文书