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分页函数
Oct 09 PHP
php 多线程上下文中安全写文件实现代码
Dec 28 PHP
理解php原理的opcodes(操作码)
Oct 26 PHP
php处理文件的小例子(解压缩,删除目录)
Feb 03 PHP
CodeIgniter框架过滤HTML危险代码
Jun 12 PHP
安装ImageMagick出现error while loading shared libraries的解决方法
Sep 23 PHP
php实现的简单美国商品税计算函数
Jul 13 PHP
PHP使用MPDF类生成PDF的方法
Dec 08 PHP
thinkPHP5分页功能实现方法分析
Oct 25 PHP
阿里云Win2016安装Apache和PHP环境图文教程
Mar 11 PHP
php传值和传引用的区别点总结
Nov 19 PHP
PHP使用Http Post请求发送Json对象数据代码解析
Jul 16 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
萌王史莱姆”萌王性别尴尬!那“萌战”归女组还是男?
2018/12/17 日漫
PHP邮件发送类PHPMailer用法实例详解
2014/09/22 PHP
PHP中开启gzip压缩的2种方法
2015/01/31 PHP
原型方法的不同写法居然会影响调试的解决方法
2007/03/08 Javascript
基于JQuery 滑动与动画的说明介绍
2013/04/18 Javascript
如何使用Jquery获取Form表单中被选中的radio值
2013/08/09 Javascript
Egret引擎开发指南之编译项目
2014/09/03 Javascript
提升PHP安全:8个必须修改的PHP默认配置
2014/11/17 Javascript
NodeJS学习笔记之Connect中间件应用实例
2015/01/27 NodeJs
jQuery实现页面滚动时动态加载内容的方法
2015/03/20 Javascript
javascript解三阶幻方(九宫格)
2015/04/22 Javascript
Bootstrap每天必学之按钮(一)
2015/11/24 Javascript
JS中artdialog弹出框控件之提交表单思路详解
2016/04/18 Javascript
JS中判断字符串中出现次数最多的字符及出现的次数的简单实例
2016/06/03 Javascript
etmvc+jQuery EasyUI+combobox多值操作实现角色授权实例
2016/11/09 Javascript
javascript 秒表计时器实现代码
2017/03/09 Javascript
Require.JS中的几种define定义方式示例
2017/06/01 Javascript
详谈DOM简介及节点、属性、查找节点的方法
2017/11/16 Javascript
jQuery实现form表单序列化转换为json对象功能示例
2018/05/23 jQuery
JS学习笔记之闭包小案例分析
2019/05/29 Javascript
Node.js API详解之 tty功能与用法实例分析
2020/04/27 Javascript
解决vue cli4升级sass-loader(v8)后报错问题
2020/07/30 Javascript
DWR内存兼容及无法调用问题解决方案
2020/10/16 Javascript
微信小程序实现可长按移动控件
2020/11/01 Javascript
[03:02]辉夜杯主赛事第二日 每日之星
2015/12/27 DOTA
python实现画一颗树和一片森林
2018/06/25 Python
在Pycharm中执行scrapy命令的方法
2019/01/16 Python
对DataFrame数据中的重复行,利用groupby累加合并的方法详解
2019/01/30 Python
树莓派动作捕捉抓拍存储图像脚本
2019/06/22 Python
Python for循环与getitem的关系详解
2020/01/02 Python
使用CSS3实现一个3D相册效果实例
2016/12/03 HTML / CSS
Smashbox英国官网:美国知名彩妆品牌
2017/11/13 全球购物
大学生饮食连锁店创业计划书
2014/01/17 职场文书
少儿节目主持串词
2014/04/02 职场文书
解析Java中的static关键字
2021/06/14 Java/Android
python基础之类属性和实例属性
2021/10/24 Python