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 相关文章推荐
基于mysql的论坛(5)
Oct 09 PHP
xajax写的留言本
Nov 25 PHP
PHP中实现中文字符进制转换原理分析
Dec 06 PHP
解析使用substr截取UTF-8中文字符串出现乱码的问题
Jun 20 PHP
php判断GIF图片是否为动画的方法
Sep 04 PHP
CentOS6.5 编译安装lnmp环境
Dec 21 PHP
通过php添加xml文档内容的方法
Jan 23 PHP
PHP+MYSQL实现用户的增删改查
Mar 24 PHP
PHP实现基于3DES算法加密解密字符串示例
Aug 24 PHP
TP5(thinkPHP5)框架基于ajax与后台数据交互操作简单示例
Sep 03 PHP
PHP数据对象映射模式实例分析
Mar 29 PHP
PHP实现数组向任意位置插入,删除,替换数据操作示例
Apr 05 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
用户的详细注册和判断
2006/10/09 PHP
PHP与MySQL开发中页面出现乱码的一种解决方法
2007/07/29 PHP
php trim 去除空字符的定义与语法介绍
2010/05/31 PHP
php采集中国代理服务器网的方法
2015/06/16 PHP
WAMP环境中扩展oracle函数库(oci)
2015/06/26 PHP
jQuery+PHP发布的内容进行无刷新分页(Fckeditor)
2015/10/22 PHP
yii2利用自带UploadedFile实现上传图片的示例
2017/02/16 PHP
ThinkPHP框架实现定时执行任务的两种方法分析
2018/09/04 PHP
Autocomplete Textbox Example javascript实现自动完成成功
2007/08/17 Javascript
JavaScript Cookie的读取和写入函数
2009/12/08 Javascript
来自国外的14个图片放大编辑的jQuery插件整理
2010/10/20 Javascript
关于jQuery参考实例2.0 用jQuery选择元素
2013/04/07 Javascript
jQuery实现动画效果的简单实例
2014/01/27 Javascript
Node.js中使用Log.io在浏览器中实时监控日志(等同tail -f命令)
2014/09/17 Javascript
js控制输入框获得和失去焦点时状态显示的方法
2015/01/30 Javascript
检测一个函数是否是JavaScript原生函数的小技巧
2015/03/13 Javascript
node网页分段渲染详解
2016/09/05 Javascript
基于angular中的重要指令详解($eval,$parse和$compile)
2016/10/21 Javascript
js实现自动轮换选项卡
2017/01/13 Javascript
addEventListener()与removeEventListener()解析
2017/04/20 Javascript
Node.js命令行/批处理中如何更改Linux用户密码浅析
2018/07/22 Javascript
jQuery实现参数自定义的文字跑马灯效果
2018/08/15 jQuery
使用iView Upload 组件实现手动上传图片的示例代码
2018/10/01 Javascript
微信小程序select下拉框实现源码
2019/11/08 Javascript
微信小程序 scroll-view 实现锚点跳转功能
2019/12/12 Javascript
解决vue加scoped后就无法修改vant的UI组件的样式问题
2020/09/07 Javascript
实例讲解Python中的私有属性
2014/08/21 Python
利用Pyhton中的requests包进行网页访问测试的方法
2018/12/26 Python
keras slice layer 层实现方式
2020/06/11 Python
分解成质因数(如435234=251*17*17*3*2,据说是华为笔试题)
2014/07/16 面试题
夜大毕业自我鉴定
2013/10/11 职场文书
儿科护士自我鉴定
2013/10/14 职场文书
大学生村官典型材料
2014/01/12 职场文书
三下乡个人总结
2015/03/04 职场文书
2015年办公室工作总结范文
2015/03/31 职场文书
学校运动会开幕词
2016/03/03 职场文书