`
凉粉仔
  • 浏览: 40665 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

PHP垃圾回收机制的理解

 
阅读更多

本文主要讨论PHP5.2和5.3的垃圾回收机制区别。

 

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

 

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

 

$a = array();
$a[] = &$a;
unset($a);
 


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

 

 

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

 

 

其他要点:

1.PHP脚本运行完毕,该脚本申请的所有内存空间都会释放,不管是否存在环状引用。因此环状引用内存泄露的问题一般只影响长时间运行的程序脚本。

 

2.垃圾回收机制需要满足一定的条件才会执行。因此unset后,系统并不一定会立即回收垃圾。

 

3.unset的作用。

“unset只是断开一个变量到一块内存区域的连接,同时将该内存区域的引用计数-1”。也就是说,如果有一个以上的变量指向同一个内存区域,或者存在环状引用,那么unset不会使内存区域释放。断开也说明unset并不会直接删除内存区域,而只是改变其引用计数而已。

 

4.$xx=null的作用。

“$a = null 是直接将$a 指向的数据结构置空,同时将其引用计数归0”。根据我对这个定义的理解,=null操作可以立即释放掉内存空间!因此很多PHP技巧中不厌其烦地对我们说,先将变量设为null,再unset。理解其深层原理后,我才彻底理解了这样做的原因!=null才是王道!

 

 

 

更多的资料请看:

http://wenku.baidu.com/view/564573c62cc58bd63186bd35.html

http://apps.hi.baidu.com/share/detail/46642891

 

  • 大小: 8.4 KB
分享到:
评论

相关推荐

    Php引用计时器和垃圾回收机制.docx

    《PHP引用计数器与垃圾回收机制详解》 PHP作为一种动态类型的编程语言,其变量管理机制包括引用计数器和垃圾回收机制,这两者是PHP内存管理的核心。本文将深入探讨这两个概念,以及它们在PHP中的实现方式。 首先,...

    Php引用计时器和垃圾回收机制[参照].pdf

    在PHP编程语言中,引用计数器和垃圾回收机制是两个关键的概念,它们与变量管理和内存管理密切相关。这里我们将深入探讨这两个概念以及它们在不同PHP版本中的实现。 首先,让我们理解PHP变量的基本结构。PHP使用`...

    Php引用计时器和垃圾回收机制.pdf

    在PHP编程语言中,引用计数器和垃圾回收机制是两个关键的概念,它们与变量的生命周期管理和内存管理紧密相关。让我们深入探讨这两个机制以及它们在PHP中的实现。 首先,PHP是一种弱类型的语言,这意味着在变量赋值...

    PHP垃圾回收机制简单说明

    为了解决这个问题,PHP引入了垃圾回收机制,会在特定条件下自动启动,查找并清除这些循环引用的对象。 在PHP中,垃圾回收的过程大致如下: 1. **检测根节点**:垃圾回收首先从符号表(symbol table)中的根节点...

    Php引用计时器和垃圾回收机制分享.pdf

    在PHP编程语言中,引用计数器和垃圾回收机制是两个关键的概念,它们与变量的生命周期管理和内存管理紧密相关。让我们深入探讨这两个机制以及它们在PHP中的实现。 首先,PHP是一种弱类型的语言,这意味着变量的类型...

    PHP session垃圾回收机制实例分析

    通过实例分析,我们可以更加直观地理解session垃圾回收机制的运行方式。例如,设置session.gc_maxlifetime为60秒,以及session.gc_probability为1000而session.gc_divisor为1000,意味着每次session_start()时,垃圾...

    简单谈谈PHP的垃圾回收机制

    1、每一个变量定义时都保存在一个叫zval的容器里面,这里面包含了数量的类型和和值,还包含了一个refcount(理解为存在几个变量个数)和is_ref(理解为是否为引用变量)两个额外信息,当变量被引用一次refcount就会+...

    掌握PHP垃圾回收机制详解

    对于程序员来说,理解PHP垃圾回收机制不仅仅是学习语言的一个部分,更是一个提升编程质量和效率的途径。在实践中,程序员应当注意避免不必要的引用,合理使用变量,以减少垃圾回收机制的工作负担,使得程序运行更加...

    PHP进阶学习之垃圾回收机制详解

    **一、PHP垃圾回收机制概述** 在PHP 5.3之前的版本,垃圾回收主要依赖于“引用计数”(Reference Counting)。每个内存对象都有一个计数器,当有变量引用它时,计数器加1,反之减1。当计数器归零时,内存对象被视为...

    深入解析PHP垃圾回收机制对内存泄露的处理

    PHP垃圾回收(Garbage Collection, 简称GC)机制是用于管理程序内存的一种自动机制,它主要负责识别并释放不再使用的内存空间,以防止内存泄露。内存泄露是指程序中已分配的内存没有被正确地释放,导致系统资源浪费...

    PHP析构函数destruct与垃圾回收机制的讲解

    在PHP编程语言中,析构函数`__destruct()`和垃圾回收机制(GC)是两个重要的概念,它们在管理内存和确保程序高效运行方面起到关键作用。这篇文章将详细讲解这两个概念。 首先,我们来理解析构函数`__destruct()`. ...

    垃圾回收器是什么1

    引用计数是一种常见的垃圾回收策略,广泛应用于Perl、Python、PHP等语言。每个对象都有一个引用计数,当计数为零时,对象被认为是可以被回收的。然而,引用计数存在一个问题,即无法处理循环引用的情况。在循环引用...

    深入理解PHP内核

    PHP采用了一种称为"垃圾回收"的机制来处理不再使用的内存。这是一种自动内存管理机制,用于追踪内存的使用情况,并在适当的时候释放内存。虽然这为开发者提供了便利,但是在高性能应用中,过度依赖这种机制可能会...

    php运行机制和mvc

    这个阶段包括内存管理,如变量的生命周期管理和垃圾回收。 4. **输出阶段**:PHP处理完所有请求后,将结果转换为HTTP响应,返回给客户端。 **MVC模式** MVC(Model-View-Controller)是一种软件设计模式,常用于...

    深入理解PHP内核-php宝典

    - **垃圾回收机制**:除了引用计数之外,PHP还引入了一种循环检测算法来处理难以检测的内存泄露情况,比如循环引用。 #### 四、结语 通过上述分析,《深入理解PHP内核—PHP宝典》不仅详细介绍了PHP内核中的关键概念...

    HP-socket 扩展 Session 包含GC垃圾回收机制-易语言

    总的来说,这个“HP-socket 扩展 Session 包含GC垃圾回收机制”的实现,为易语言的开发者提供了一套完整的、类似于PHP的Session管理解决方案,同时解决了内存管理问题,适合于商业项目的开发。对于熟悉PHP Session的...

Global site tag (gtag.js) - Google Analytics