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论坛 用户登录 后台程序代码
Nov 27 PHP
PHP 多进程 解决难题
Jun 22 PHP
discuz程序的PHP加密函数原理分析
Aug 05 PHP
CI框架装载器Loader.php源码分析
Nov 04 PHP
php连接odbc数据源并保存与查询数据的方法
Dec 24 PHP
Codeigniter校验ip地址的方法
Mar 21 PHP
PHP中的traits实现代码复用使用实例
May 13 PHP
PHP实现多文件上传的方法
Jul 08 PHP
php算法实例分享
Jul 14 PHP
phalcon框架使用指南
Feb 23 PHP
PHP检查网站是否宕机的方法示例
Jul 24 PHP
php 广告点击统计代码(php+mysql)
Feb 21 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生成不重复标识符的方法
2014/11/21 PHP
快速解决PHP调用Word组件DCOM权限的问题
2017/12/27 PHP
PHP registerXPathNamespace()函数讲解
2019/02/03 PHP
Laravel 微信小程序后端搭建步骤详解
2019/11/26 PHP
javascript不同页面传值的改进版
2008/09/30 Javascript
js解析与序列化json数据(一)json.stringify()的基本用法
2013/02/01 Javascript
js中eval()函数和trim()去掉字符串左右空格应用
2013/02/02 Javascript
有关于eclipse配置spket需要注意的一些地方
2013/04/07 Javascript
location.href用法总结(最主要的)
2013/12/27 Javascript
js字符串日期yyyy-MM-dd转化为date示例代码
2014/03/06 Javascript
javascript 常用验证函数总结
2016/06/28 Javascript
JS中Json数据的处理和解析JSON数据的方法详解
2016/06/29 Javascript
简单分析javascript中的函数
2016/09/10 Javascript
快速了解Vue父子组件传值以及父调子方法、子调父方法
2020/07/15 Javascript
[02:40]DOTA2英雄基础教程 先知
2013/11/29 DOTA
[40:29]2018DOTA2亚洲邀请赛 4.7总决赛 LGD vs Mineski 第一场
2018/04/10 DOTA
[10:54]Team Spirit vs Navi
2018/06/07 DOTA
Python编程之黑板上排列组合,你舍得解开吗
2017/10/30 Python
神经网络python源码分享
2017/12/15 Python
pyqt5 键盘监听按下enter 就登陆的实例
2019/06/25 Python
Python画图高斯分布的示例
2019/07/10 Python
python字典和json.dumps()的遇到的坑分析
2020/03/11 Python
Anaconda+Pycharm环境下的PyTorch配置方法
2020/03/13 Python
VS2019+python3.7+opencv4.1+tensorflow1.13配置详解
2020/04/16 Python
python给list排序的简单方法
2020/12/10 Python
浅析HTML5 Landmark
2020/09/11 HTML / CSS
瑰珀翠美国官网:Crabtree & Evelyn美国
2016/11/29 全球购物
英国网上购买肉类网站:Great British Meat
2018/10/17 全球购物
大学毕业生通用自我评价
2014/01/05 职场文书
四年大学生活的自我评价范文
2014/02/07 职场文书
交通事故赔偿协议书范本
2014/04/15 职场文书
八项规定对照检查材料
2014/08/31 职场文书
学生党员批评与自我批评
2014/10/15 职场文书
2015年社区服务活动总结
2015/03/25 职场文书
销售员岗位职责范本
2015/04/11 职场文书
实习员工转正的评语汇总,以备不时之需
2019/12/17 职场文书