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 相关文章推荐
Discuz板块横排显示图片的实现方法
May 28 PHP
Mysql和网页显示乱码解决方法集锦
Mar 27 PHP
php设计模式 Bridge (桥接模式)
Jun 26 PHP
PHP中$_SERVER的详细参数与说明介绍
Oct 26 PHP
PHP加密扩展库Mcrypt安装和实例
Nov 10 PHP
分享五个PHP7性能优化提升技巧
Dec 07 PHP
PHP图形操作之Jpgraph学习笔记
Dec 25 PHP
php使用ffmpeg获取视频信息并截图的实现方法
May 03 PHP
PHP实现超简单的SSL加密解密、验证及签名的方法示例
Aug 28 PHP
PHP实现网站访问量计数器
Oct 27 PHP
thinkPHP框架动态配置用法实例分析
Jun 14 PHP
PHP Swoole异步MySQL客户端实现方法示例
Oct 24 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 日期加减的类,很不错
2009/10/10 PHP
PHP 引用是个坏习惯
2010/03/12 PHP
PHP关于IE下的iframe跨域导致session丢失问题解决方法
2013/10/10 PHP
php中JSON的使用与转换
2015/01/14 PHP
DHTML Slide Show script图片轮换
2008/03/03 Javascript
js加强的经典分页实例
2013/03/15 Javascript
json数据与字符串的相互转化示例
2013/09/18 Javascript
jquery中的on方法使用介绍
2013/12/29 Javascript
node.js中的fs.statSync方法使用说明
2014/12/16 Javascript
基于jquery实现一个滚动的分步注册向导-附源码
2015/08/26 Javascript
探究JavaScript函数式编程的乐趣
2015/12/14 Javascript
jQuery的选择器中的通配符[id^='code']或[name^='code']及jquery选择器总结
2015/12/24 Javascript
JavaScript必知必会(二) null 和undefined
2016/06/08 Javascript
详解使用Vue.Js结合Jquery Ajax加载数据的两种方式
2017/01/10 Javascript
PHP实现本地图片上传和验证功能
2017/02/27 Javascript
JavaScript中 ES6变量的结构赋值
2018/07/10 Javascript
微信小程序中为什么使用var that=this
2019/08/27 Javascript
[36:20]KG vs SECRET 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/19 DOTA
Python ORM框架SQLAlchemy学习笔记之数据查询实例
2014/06/10 Python
Python中的Matplotlib模块入门教程
2015/04/15 Python
Python 中的range(),以及列表切片方法
2018/07/02 Python
python生成1行四列全2矩阵的方法
2018/08/04 Python
pytorch 输出中间层特征的实例
2019/08/17 Python
pytorch 实现打印模型的参数值
2019/12/30 Python
python通用读取vcf文件的类(复制粘贴即可用)
2020/02/29 Python
Python如何存储数据到json文件
2020/03/09 Python
Python爬虫实例——爬取美团美食数据
2020/07/15 Python
IE8下CSS3选择器nth-child() 不兼容问题的解决方法
2016/11/16 HTML / CSS
美国专业级皮肤病和spa品质护肤品的高级零售网站:SkinCareRx
2017/02/06 全球购物
NHL官方在线商店:Shop.NHL.com
2020/05/01 全球购物
餐厅总经理岗位职责
2013/12/31 职场文书
创业计划书模版
2014/02/05 职场文书
跟单业务员岗位职责
2014/03/08 职场文书
教师查摆问题自查报告
2014/10/11 职场文书
js Proxy的原理详解
2021/05/25 Javascript
ROS系统将python包编译为可执行文件的简单步骤
2021/07/25 Python