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实现的遍历文件夹下所有文件,编辑删除
Jan 05 PHP
php数字游戏 计算24算法
Jun 10 PHP
在PHP中使用redis
Nov 04 PHP
ThinkPHP3.1新特性之动态设置自动完成及自动验证示例代码
Jun 23 PHP
php查询mysql数据库并将结果保存到数组的方法
Mar 18 PHP
php删除文本文件中重复行的方法
Apr 28 PHP
PHP抓取网页、解析HTML常用的方法总结
Jul 01 PHP
CI框架中redis缓存相关操作文件示例代码
May 17 PHP
Thinkphp3.2.3整合phpqrcode生成带logo的二维码
Jul 21 PHP
jquery不支持toggle()高(新)版本的问题解决
Sep 24 PHP
PHP的CURL方法curl_setopt()函数案例介绍(抓取网页,POST数据)
Dec 14 PHP
PHP API接口必备之输出json格式数据示例代码
Jun 27 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
Discuz!下Memcache缓存实现方法
2010/05/28 PHP
php操作redis中的hash和zset类型数据的方法和代码例子
2014/07/05 PHP
php获取apk包信息的方法
2014/08/15 PHP
基于ThinkPHP5框架使用QueryList爬取并存入mysql数据库操作示例
2019/05/25 PHP
JavaScript null和undefined区别分析
2009/10/14 Javascript
JavaScript初学者应注意的七个细节详细介绍
2012/12/27 Javascript
jQuery之尺寸调整组件的深入解析
2013/06/19 Javascript
Javascript 修改String 对象 增加去除空格功能(示例代码)
2013/11/30 Javascript
javascript页面渲染速度测试脚本分享
2014/04/15 Javascript
通过学习bootstrop导航条学会修改bootstrop颜色基调
2017/06/11 Javascript
详解vue.js+UEditor集成 [前后端分离项目]
2017/07/07 Javascript
echarts学习笔记之箱线图的分析与绘制详解
2017/11/22 Javascript
javascript实现Emrips反质数枚举的示例代码
2017/12/06 Javascript
vue.js或js实现中文A-Z排序的方法
2018/03/08 Javascript
vue项目中jsonp跨域获取qq音乐首页推荐问题
2018/05/30 Javascript
vue使用Element组件时v-for循环里的表单项验证方法
2018/06/28 Javascript
angularJs中ng-model-options设置数据同步的方法
2018/09/30 Javascript
如何对react hooks进行单元测试的方法
2019/08/14 Javascript
JavaScript事件循环及宏任务微任务原理解析
2020/09/02 Javascript
[00:31]2016完美“圣”典风云人物:国士无双宣传片
2016/12/04 DOTA
[00:09]DOTA2全国高校联赛 精彩活动引爆全场
2018/05/30 DOTA
python中实现字符串翻转的方法
2018/07/11 Python
在IPython中执行Python程序文件的示例
2018/11/01 Python
正确理解Python中if __name__ == '__main__'
2019/01/24 Python
python3的print()函数的用法图文讲解
2019/07/16 Python
python实现图片中文字分割效果
2019/07/22 Python
python实现每天自动签到领积分的示例代码
2020/08/18 Python
AmazeUI 单选框和多选框的实现示例
2020/08/18 HTML / CSS
泰国Robinson百货官网:购买知名品牌的商品
2020/02/08 全球购物
毕业生找工作的求职信范文
2013/12/24 职场文书
单位领导证婚词
2014/01/14 职场文书
阳光体育活动方案
2014/02/16 职场文书
教师一岗双责责任书
2014/04/16 职场文书
作文评语怎么写
2014/12/25 职场文书
餐厅如何利用“营销策略”扭转亏本局面
2019/10/15 职场文书
Python访问Redis的详细操作
2021/06/26 Python