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概述.
Oct 09 PHP
php 获得汉字拼音首字母的函数
Aug 01 PHP
PHP验证码类代码( 最新修改,完全定制化! )
Dec 02 PHP
PHP将两个关联数组合并函数提高函数效率
Mar 18 PHP
Laravel 4 初级教程之Pages、表单验证
Oct 30 PHP
php 魔术方法详解
Nov 11 PHP
PHP中preg_match正则匹配中的/u、/i、/s含义
Apr 17 PHP
php关闭warning问题的解决方法
May 17 PHP
php使用ffmpeg向视频中添加文字字幕的实现方法
May 23 PHP
PHP策略模式定义与用法示例
Jul 27 PHP
PHP实现的抓取小说网站内容功能示例
Jun 27 PHP
php扩展开发入门demo示例
Sep 23 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使用ob_flush不能每隔一秒输出原理分析
2015/06/02 PHP
PHP的cookie与session原理及用法详解
2019/09/27 PHP
Javascript 获取链接(url)参数的方法[正则与截取字符串]
2010/02/09 Javascript
jQuery maxlength文本字数限制插件
2010/04/16 Javascript
JavaScript中使用replace结合正则实现replaceAll的效果
2010/06/04 Javascript
5秒后跳转到另一个页面的js代码
2013/10/12 Javascript
jquery+json实现数据列表分页示例代码
2013/11/15 Javascript
Javascript遍历table中的元素示例代码
2014/07/08 Javascript
JavaScript设计模式之工厂模式和构造器模式
2015/02/11 Javascript
Bootstrap基本样式学习笔记之按钮(4)
2016/12/07 Javascript
基于jQuery实现简单人工智能聊天室
2017/02/10 Javascript
详解Vue 2.0封装axios笔记
2017/06/22 Javascript
JS原型与继承操作示例
2019/05/09 Javascript
Vue配置marked链接添加target=&quot;_blank&quot;的方法
2019/07/19 Javascript
VUE+elementui组件在table-cell单元格中绘制微型echarts图
2020/04/20 Javascript
Openlayers实现地图的基本操作
2020/09/28 Javascript
python实现根据用户输入从电影网站获取影片信息的方法
2015/04/07 Python
Python循环语句之break与continue的用法
2015/10/14 Python
python学生信息管理系统
2018/03/13 Python
Python下简易的单例模式详解
2019/04/08 Python
Python3爬虫带上cookie的实例代码
2020/07/28 Python
python如何实现word批量转HTML
2020/09/30 Python
html+css实现自定义图片上传按钮功能
2019/09/04 HTML / CSS
南京迈特望C/C++面试题
2012/07/09 面试题
应届生船舶驾驶求职信
2013/10/19 职场文书
校园报刊亭创业计划书
2014/01/02 职场文书
驾驶员培训方案
2014/05/01 职场文书
大型会议策划方案
2014/05/17 职场文书
外贸业务员求职信
2014/06/16 职场文书
大学活动总结模板
2014/07/10 职场文书
2014党员学习兰辉先进事迹思想汇报
2014/09/17 职场文书
2015年办公室个人工作总结
2015/04/20 职场文书
学校财务管理制度
2015/08/04 职场文书
关于html选择框创建占位符的问题
2021/06/09 HTML / CSS
Opencv中cv2.floodFill算法的使用
2021/06/18 Python
python非标准时间的转换
2021/07/25 Python