本文主要讨论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引用计数器与垃圾回收机制详解》 PHP作为一种动态类型的编程语言,其变量管理机制包括引用计数器和垃圾回收机制,这两者是PHP内存管理的核心。本文将深入探讨这两个概念,以及它们在PHP中的实现方式。 首先,...
在PHP编程语言中,引用计数器和垃圾回收机制是两个关键的概念,它们与变量管理和内存管理密切相关。这里我们将深入探讨这两个概念以及它们在不同PHP版本中的实现。 首先,让我们理解PHP变量的基本结构。PHP使用`...
在PHP编程语言中,引用计数器和垃圾回收机制是两个关键的概念,它们与变量的生命周期管理和内存管理紧密相关。让我们深入探讨这两个机制以及它们在PHP中的实现。 首先,PHP是一种弱类型的语言,这意味着在变量赋值...
为了解决这个问题,PHP引入了垃圾回收机制,会在特定条件下自动启动,查找并清除这些循环引用的对象。 在PHP中,垃圾回收的过程大致如下: 1. **检测根节点**:垃圾回收首先从符号表(symbol table)中的根节点...
在PHP编程语言中,引用计数器和垃圾回收机制是两个关键的概念,它们与变量的生命周期管理和内存管理紧密相关。让我们深入探讨这两个机制以及它们在PHP中的实现。 首先,PHP是一种弱类型的语言,这意味着变量的类型...
通过实例分析,我们可以更加直观地理解session垃圾回收机制的运行方式。例如,设置session.gc_maxlifetime为60秒,以及session.gc_probability为1000而session.gc_divisor为1000,意味着每次session_start()时,垃圾...
1、每一个变量定义时都保存在一个叫zval的容器里面,这里面包含了数量的类型和和值,还包含了一个refcount(理解为存在几个变量个数)和is_ref(理解为是否为引用变量)两个额外信息,当变量被引用一次refcount就会+...
对于程序员来说,理解PHP垃圾回收机制不仅仅是学习语言的一个部分,更是一个提升编程质量和效率的途径。在实践中,程序员应当注意避免不必要的引用,合理使用变量,以减少垃圾回收机制的工作负担,使得程序运行更加...
**一、PHP垃圾回收机制概述** 在PHP 5.3之前的版本,垃圾回收主要依赖于“引用计数”(Reference Counting)。每个内存对象都有一个计数器,当有变量引用它时,计数器加1,反之减1。当计数器归零时,内存对象被视为...
PHP垃圾回收(Garbage Collection, 简称GC)机制是用于管理程序内存的一种自动机制,它主要负责识别并释放不再使用的内存空间,以防止内存泄露。内存泄露是指程序中已分配的内存没有被正确地释放,导致系统资源浪费...
在PHP编程语言中,析构函数`__destruct()`和垃圾回收机制(GC)是两个重要的概念,它们在管理内存和确保程序高效运行方面起到关键作用。这篇文章将详细讲解这两个概念。 首先,我们来理解析构函数`__destruct()`. ...
引用计数是一种常见的垃圾回收策略,广泛应用于Perl、Python、PHP等语言。每个对象都有一个引用计数,当计数为零时,对象被认为是可以被回收的。然而,引用计数存在一个问题,即无法处理循环引用的情况。在循环引用...
PHP采用了一种称为"垃圾回收"的机制来处理不再使用的内存。这是一种自动内存管理机制,用于追踪内存的使用情况,并在适当的时候释放内存。虽然这为开发者提供了便利,但是在高性能应用中,过度依赖这种机制可能会...
这个阶段包括内存管理,如变量的生命周期管理和垃圾回收。 4. **输出阶段**:PHP处理完所有请求后,将结果转换为HTTP响应,返回给客户端。 **MVC模式** MVC(Model-View-Controller)是一种软件设计模式,常用于...
- **垃圾回收机制**:除了引用计数之外,PHP还引入了一种循环检测算法来处理难以检测的内存泄露情况,比如循环引用。 #### 四、结语 通过上述分析,《深入理解PHP内核—PHP宝典》不仅详细介绍了PHP内核中的关键概念...
PHP使用了两种主要的内存管理机制:内存池和垃圾回收机制。 - **内存池**:用于管理短生命周期的内存分配,如字符串等。 - **垃圾回收机制**:负责自动回收不再使用的内存资源,防止内存泄漏。 #### 五、性能优化 ...
总的来说,这个“HP-socket 扩展 Session 包含GC垃圾回收机制”的实现,为易语言的开发者提供了一套完整的、类似于PHP的Session管理解决方案,同时解决了内存管理问题,适合于商业项目的开发。对于熟悉PHP Session的...