当前位置:  编程技术>php

php垃圾回收机制解析

    来源: 互联网  发布时间:2014-08-30

    本文导语:  说说php垃圾回收机制,每一种语言都自己的自动垃圾回收机制,让程序执行完之后会自动清除内存。 php 垃圾回收机制(garbage collector 简称gc) 5.2使用“引用计数”方式进行回收。 即每个分配的内存区域都有一个计数器,记录有...

说说php垃圾回收机制,每一种语言都自己的自动垃圾回收机制,让程序执行完之后会自动清除内存。

php 垃圾回收机制(garbage collector 简称gc)

5.2使用“引用计数”方式进行回收。
即每个分配的内存区域都有一个计数器,记录有多少个变量指针指向这片内存。当指向该片内存的指针数量为0,那么该片内存区域就可以被回收。

引用计数计数简单,强大,但是有一个致命的缺陷,就是环状引用。
代码:
 

代码示例:
$a = array();
$a[] = &$a;
unset($a);

变量$a引用了自己,形成了一个环。$a被unset了,可是由于存在环状引用,因此$a之前指向的内存的引用计数为1,因此该内存区域不会被垃圾回收机制回收。

php5.3针对这个重大的缺陷做了优化。虽然其基础仍然是引用计数,但是在做了一些改良,能够将环状引用导致的内存泄露控制在一定的规模以内。
当然,这并不是说你可以随便滥用内存,编写代码时仍然要小心为上!(脚本学堂 www.)

其他要点:
1、php脚本运行完毕,该脚本申请的所有内存空间都会释放,不管是否存在环状引用。因此环状引用内存泄露的问题一般只影响长时间运行的程序脚本。
2、垃圾回收机制需要满足一定的条件才会执行。因此unset后,系统并不一定会立即回收垃圾。
3、unset的作用。
“unset只是断开一个变量到一块内存区域的连接,同时将该内存区域的引用计数-1”。
如果有一个以上的变量指向同一个内存区域,或者存在环状引用,那么unset不会使内存区域释放。断开也说明unset并不会直接删除内存区域,而只是改变其引用计数而已。
4、$xx=null的作用。
“$a = null 是直接将$a 指向的数据结构置空,同时将其引用计数归0”。根据我对这个定义的理解,=null操作可以立即释放掉内存空间!
因此很多php技巧中不厌其烦地对我们说,先将变量设为null,再unset。理解其深层原理后,我才彻底理解了这样做的原因!=null才是王道!


    
 
 

您可能感兴趣的文章:

  • php通过pack和unpack函数实现对二进制数据封装及解析
  • Linux下重编译PHP后Apache竟然不能解析.php文件?
  • PHP的Markdown解析器 Parsedown
  • PHP的PDF解析库 PdfParser
  • PHP和Perl的XML解析包 MiniXML
  • PHP的XML和JSON数据解析和缓存包 coreylib
  • php trim函数执行过程解析
  • 好象我的apache服务器不解析我的php程序啊(why)
  • php解析json数据实例
  • PHP的HTML解析工具 HtmlParser
  • 一个不易被发现的PHP后门代码解析
  • PHP文件锁定写入实例解析
  • PHP json_decode函数详细解析
  • PHP服务器端异步执行方法解析
  • php替换换行符的问题解析
  • php多任务程序实例解析
  • PHP的HTML解析 wiseparser
  • php伪造ip与防止伪造ip方法解析
  • php文件锁定写入实例解析
  • php解析url的三个示例
  • php生成GUID(全球唯一标识符)方法解析
  • php会话(session)生命周期概念介绍及设置更改和回收
  • php中session过期时间设置及session回收机制介绍
  • php析构函数与垃圾回收机制
  • php session机制详解(生成机制、回收机制与存储机制)
  • php中Session的生成机制、回收机制和存储机制探究
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • php反射机制获取php类的所有方法
  • 简单的php缓存类分享 php缓存机制
  • PHP中copy on write写时复制机制介绍
  • PHP中的插件机制原理和实例
  • php自动加载autoload机制实例分析
  • php递归函数执行机制实例分享
  • php自动加载autoload机制示例分享
  • PHP缓存机制Output Control详解
  • PHP中的reflection反射机制测试例子
  • 实例介绍PHP的Reflection反射机制
  • PHP Session机制简介及用法
  • php autoload机制用法解析
  • windows的文件系统机制引发的PHP路径爆破问题分析
  • PHP OPP机制和模式简介(抽象类、接口和契约式编程)
  • Session的工作机制详解和安全性问题(PHP实例讲解)
  • 修改配置真正解决php文件上传大小限制问题(nginx+php)
  • IIS7配置PHP图解(IIS7+PHP_5.2.17/PHP_5.3.5)
  • PHP 5.4.19 和 PHP 5.5.3 发布及下载地址
  • php输入流php://input使用示例(php发送图片流到服务器)
  • 修改配置真正解决php文件上传大小限制问题(apache+php)
  • PHP转换器 HipHop for PHP
  • PHP去除html标签,php标记及css样式代码参考
  • PHP 框架 Pop php
  • PHP 'ext/soap/php_xml.c'不完整修复存在多个任意文件泄露漏洞
  • PHP的JavaScript框架 PHP.JS
  • php通过socket_bind()设置IP地址代码示例
  • php服务器探针显示php服务器信息
  • php安装完成后如何添加mysql扩展
  • PHP缓存加速器 Alternative PHP Cache (APC)
  • PHP的substr() 函数用法
  • PHP源文件加密工具 PHP Screw


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3