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如何得到当前页和上一页的地址?
Nov 27 PHP
实用函数5
Nov 08 PHP
PHP 代码规范小结
Mar 08 PHP
php在项目中寻找代码的坏味道(综艺命名)
Jul 19 PHP
对象失去焦点时自己动提交数据的实现代码
Nov 06 PHP
PHP中文分词 自动获取关键词介绍
Nov 13 PHP
PHP之sprintf函数用法详解
Nov 12 PHP
基于CakePHP实现的简单博客系统实例
Jun 28 PHP
CI框架AR操作(数组形式)实现插入多条sql数据的方法
May 18 PHP
PHP 在数组中搜索给定的简单实例 array_search 函数
Jun 13 PHP
thinkphp5框架调用其它控制器方法 实现自定义跳转界面功能示例
Jul 03 PHP
解决php extension 加载顺序问题
Aug 16 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
博士208HAF收音机实习报告
2021/03/02 无线电
php随机显示图片的简单示例
2014/02/15 PHP
PHP管理依赖(dependency)关系工具 Composer的自动加载(autoload)
2014/08/18 PHP
JavaScript简单遍历DOM对象所有属性的实现方法
2015/10/21 Javascript
jQuery移动端图片上传组件
2016/06/12 Javascript
jquery之别踩白块游戏的简单实现
2016/07/25 Javascript
Jquery 整理元素选取、常用方法一览表
2016/11/26 Javascript
简单实现node.js图片上传
2016/12/18 Javascript
微信小程序图表插件(wx-charts)实例代码
2017/01/17 Javascript
vue动态组件实现选项卡切换效果
2017/03/08 Javascript
vue中v-show和v-if的异同及v-show用法
2019/06/06 Javascript
uin-app+mockjs实现本地数据模拟
2020/08/26 Javascript
原生JS生成指定位数的验证码
2020/10/28 Javascript
Javascript文本框脚本实现方法解析
2020/10/30 Javascript
[00:32]10月24、25日 辉夜杯外卡赛附加赛开赛!
2015/10/23 DOTA
[08:56]DOTA2-DPC中国联赛2月23日Recap集锦
2021/03/11 DOTA
初步解析Python下的多进程编程
2015/04/28 Python
Android应用开发中Action bar编写的入门教程
2016/02/26 Python
Python使用urllib2模块抓取HTML页面资源的实例分享
2016/05/03 Python
python如何定义带参数的装饰器
2018/03/20 Python
浅谈pycharm下找不到sqlalchemy的问题
2018/12/03 Python
Tensorflow中的降维函数tf.reduce_*使用总结
2020/04/20 Python
PyQt实现计数器的方法示例
2021/01/18 Python
html5 web本地存储将取代我们的cookie
2012/12/26 HTML / CSS
html5实现滑块功能之type=&quot;range&quot;属性
2020/02/18 HTML / CSS
HearthSong官网:儿童户外玩具、儿童益智玩具
2017/10/16 全球购物
介绍一些UNIX常用简单命令
2014/11/11 面试题
Delphi笔试题
2016/11/14 面试题
入党自我评价范文
2014/02/02 职场文书
制作部班长职位说明书
2014/02/26 职场文书
群众路线个人对照检查材料
2014/09/23 职场文书
毕业证代领委托书
2014/09/26 职场文书
煤矿施工安全协议书
2016/03/22 职场文书
HAM-2000摩机图
2021/04/22 无线电
Java工作中实用的代码优化技巧分享
2022/04/21 Java/Android
Tomcat配置访问日志和线程数
2022/05/06 Servers