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的FTP学习(一)[转自奥索]
Oct 09 PHP
PHP学习之PHP运算符
Oct 09 PHP
php为什么选mysql作为数据库? Mysql 创建用户方法
Jul 02 PHP
QueryPath PHP 中的jQuery
Apr 11 PHP
php获取本地图片文件并生成xml文件输出具体思路
Apr 27 PHP
php文件服务实现虚拟挂载其他目录示例
Apr 17 PHP
PHP导入导出Excel代码
Jul 07 PHP
PHP获取当前日期及本周一是几月几号的方法
Mar 28 PHP
详细解读php的命名空间(二)
Feb 21 PHP
Laravel框架实现的上传图片到七牛功能详解
Sep 06 PHP
Laravel等框架模型关联的可用性浅析
Dec 15 PHP
PHP类的自动加载与命名空间用法实例分析
Jun 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
《OVERLORD》第四季,终于等到你!
2020/03/02 日漫
PHP模拟SQL Server的两个日期处理函数
2006/10/09 PHP
PHP自动更新新闻DIY
2006/10/09 PHP
thinkphp配置连接数据库技巧
2014/12/02 PHP
PHP基于curl实现模拟微信浏览器打开微信链接的方法示例
2019/02/15 PHP
php使用event扩展的io复用测试的示例
2020/10/20 PHP
理解JavaScript变量作用域更轻松
2009/10/25 Javascript
javascript中style.left和offsetLeft的用法说明
2014/03/07 Javascript
使用insertAfter()方法在现有元素后添加一个新元素
2014/05/28 Javascript
jQuery前端框架easyui使用Dialog时bug处理
2014/12/05 Javascript
在HTML中插入JavaScript代码的示例
2015/06/03 Javascript
Bootstrap每天必学之轮播(Carousel)插件
2016/04/25 Javascript
jQuery ajax调用后台aspx后台文件的两种常见方法(不是ashx)
2016/06/28 Javascript
jquery层级选择器的实现(匹配后代元素div)
2016/09/05 Javascript
tablesorter.js表格排序使用方法(支持中文排序)
2017/02/10 Javascript
js实现文字无缝向上滚动
2017/02/16 Javascript
jQuery为某个div加入行样式
2017/06/09 jQuery
基于JavaScript实现淘宝商品广告效果
2017/08/10 Javascript
vue实现组件之间传值功能示例
2018/07/13 Javascript
微信小程序实现默认第一个选中变色效果
2018/07/17 Javascript
浅谈React碰到v-if
2018/11/04 Javascript
微信小程序五子棋游戏AI实现方法【附demo源码下载】
2019/02/20 Javascript
解决VUE mounted 钩子函数执行时 img 未加载导致页面布局的问题
2020/07/27 Javascript
从零学Python之hello world
2014/05/21 Python
Python多继承原理与用法示例
2018/08/23 Python
Python数据可视化:箱线图多种库画法
2019/11/06 Python
opencv3/C++图像像素操作详解
2019/12/10 Python
HTML5超炫酷粒子效果的进度条的实现示例
2019/08/23 HTML / CSS
加拿大奢华时装品牌:Mackage
2018/01/10 全球购物
Douglas意大利官网:购买香水和化妆品
2020/05/27 全球购物
自动化职业生涯规划书范文
2014/01/03 职场文书
目标管理责任书
2014/04/15 职场文书
2014年售票员工作总结
2014/11/19 职场文书
离婚协议书范文2014(夫妻感情破裂)
2014/12/14 职场文书
2015年医德考评自我评价
2015/03/03 职场文书
Java 常见的限流算法详细分析并实现
2022/04/07 Java/Android