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编程实现获取excel文档内容的代码实例
Jun 28 PHP
非常好用的两个PHP函数 serialize()和unserialize()
Feb 04 PHP
PHP之短标签开启设置
Jun 17 PHP
php实现约瑟夫问题的方法小结
Mar 23 PHP
php实现RSA加密类实例
Mar 26 PHP
php判断两个日期之间相差多少个月份的方法
Jun 18 PHP
php结合curl实现多线程抓取
Jul 09 PHP
浅谈使用PHP开发微信支付的流程
Oct 04 PHP
实例简介PHP的一些高级面向对象编程的特性
Nov 27 PHP
php封装的mysqli类完整实例
Oct 18 PHP
YII2 实现多语言配置的方法分享
Jan 11 PHP
php+ajax 文件上传代码实例
Mar 18 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获取url字符串截取路径的文件名和扩展名的函数
2010/01/22 PHP
mysql From_unixtime及UNIX_TIMESTAMP及DATE_FORMAT日期函数
2010/03/21 PHP
巧用php中的array_filter()函数去掉多维空值的代码分享
2012/09/07 PHP
ThinkPHP表单自动提交验证实例教程
2014/07/18 PHP
PHP实现格式化文件数据大小显示的方法
2015/01/03 PHP
php一个文件搞定微信jssdk配置
2016/12/12 PHP
查询绑定数据岛的表格中的文本并修改显示方式的js代码
2009/12/15 Javascript
基于jquery的让textarea自适应高度的插件
2010/08/03 Javascript
JQuery Study Notes 学习笔记(一)
2010/08/04 Javascript
ExtJS下 Ext.Direct加载和提交过程排错小结
2013/04/02 Javascript
js获取判断上传文件后缀名的示例代码
2014/02/19 Javascript
8个实用的jQuery技巧
2014/03/04 Javascript
详解JavaScript中的blink()方法的使用
2015/06/08 Javascript
详解Vue爬坑之vuex初识
2017/06/14 Javascript
Javascript实现基本运算器
2017/07/15 Javascript
AngularJS实现的获取焦点及失去焦点时的表单验证功能示例
2017/10/25 Javascript
详解vue+webpack+express中间件接口使用
2018/07/17 Javascript
JavaScript变量作用域及内存问题实例分析
2019/06/10 Javascript
vue draggable resizable 实现可拖拽缩放的组件功能
2019/07/15 Javascript
Vue.directive 实现元素scroll逻辑复用
2019/11/29 Javascript
[10:54]Team Spirit vs Navi
2018/06/07 DOTA
python中快速进行多个字符替换的方法小结
2016/12/15 Python
python3实现微型的web服务器
2019/09/03 Python
Python求正态分布曲线下面积实例
2019/11/20 Python
详解python 降级到3.6终极解决方案
2020/02/06 Python
python TCP包注入方式
2020/05/05 Python
英国最大的高品质珠宝和手表专家:Goldsmiths
2017/03/11 全球购物
校本教研工作方案
2014/01/14 职场文书
霸王洗发水广告词
2014/03/14 职场文书
个人廉洁自律承诺书
2014/03/27 职场文书
仓库管理计划书
2014/05/04 职场文书
教师考察材料范文
2014/06/03 职场文书
2015年专项整治工作总结
2015/04/03 职场文书
2015年科研工作总结范文
2015/05/13 职场文书
使用SQL实现车流量的计算的示例代码
2022/02/28 SQL Server
详细介绍Next.js脚手架完整搭建封装
2022/04/26 Javascript