PHP垃圾回收机制是php5之后才有的这个东西,下面我来给大家介绍一下关于PHP垃圾回收机制一些理解,希望对各位同学有所帮助。

php 5.3之前使用的垃圾回收机制是单纯的“引用计数”,也就是每个内存对象都分配一个计数器,当内存对象被变量引用时,计数器 1;当变量引用撤掉后,计数器-1;当计数器=0时,表明内存对象没有被使用,该内存对象则进行销毁,垃圾回收完成。

“引用计数”存在问题,就是当两个或多个对象互相引用形成环状后,内存对象的计数器则不会消减为0;这时候,这一组内存对象已经没用了,但是不能回收,从而导致内存泄露;

php5.3开始,使用了新的垃圾回收机制,在引用计数基础上,实现了一种复杂的算法,来检测内存对象中引用环的存在,以避免内存泄露。

该算法可以参考下面这篇文章,这是这篇小总结的主要参考文献:) :浅谈PHP5中垃圾回收算法(Garbage Collection)的演化

看下面的例子

Example 1: gc.php

error_reporting(E_ALL);

$a = 'I am test.';

$b = & $a;

echo $b ."
";

?>

不用说 % php -f gc.php 输出结果非常明了:

hy0kl% php -f gc.php

I am test.

君请看:好,下一个:

Example 2:

error_reporting(E_ALL);

$a = 'I am test.';

$b = & $a;

$b = 'I will change?';

echo $a ."
";

echo $b ."
";

?>

执行结果依然很明显:

hy0kl% php -f gc.php

I will change?

I will change?

Example 3:

error_reporting(E_ALL);

$a = 'I am test.';

$b = & $a;

unset($a);

echo $a ."
";

echo $b ."
";

?>

是不是得想一下下呢?

hy0kl% php -f gc.php

Notice: Undefined variable: a in /usr/local/www/apache22/data/test/gc.php on line 8

I am test.

有点犯迷糊了吗?

君再看:

Example 4:

error_reporting(E_ALL);

$a = 'I am test.';

$b = & $a;

unset($b);

echo $a ."
";

echo $b ."
";

?>

其实如果 Example 3 理解了,这个与之异曲同工.

hy0kl% php -f gc.php

I am test.

Notice: Undefined variable: b in /usr/local/www/apache22/data/test/gc.php on line 9

君且看:

Example 5:

error_reporting(E_ALL);

$a = 'I am test.';

$b = & $a;

$a = null;

echo '$a = '. $a ."
";

echo '$b = '. $b ."
";

?>

猛的第一感觉是什么样的?

hy0kl% php -f gc.php

$a =

$b =

没错,这就是输出结果,对 PHP GC 已有深入理解的 phper 不会觉得有什么奇怪,说实话,当我第一次运行这段代码时很意外,却让我对 PHP GC 有更深刻的理解了.那么下面与之同工的例子自然好理解了.

Example 6:

error_reporting(E_ALL);

$a = 'I am test.';

$b = & $a;

$b = null;

echo '$a = '. $a ."
";

echo '$b = '. $b ."
";

?>

这是一篇的php教程了,大家还可以百度去了解更多关于PHP垃圾回收机制文章哦,这里就不一一介绍了。

php垃圾回收,PHP垃圾回收机制的理解相关推荐

  1. python 垃圾回收器_Python 垃圾回收机制详细

    引用计数 Python语言默认采用的垃圾收集机制是『引用计数法 Reference Counting』,该算法最早George E. Collins在1960的时候首次提出,50年后的今天,该算法依然 ...

  2. java 强制垃圾回收_Java垃圾回收机制

    Java垃圾回收机制 垃圾回收机制用到finalize.当程序创建对象.数组等引用类型实体时,系统都会在堆内存中为之分配一块内存区,对象就保存在这块内存中,当这块内存不再被任何引用变量引用时,这块内存 ...

  3. JAVA之JVM垃圾回收(GC)机制详解

    一.为什么需要垃圾回收 如果不进行垃圾回收,内存迟早都会被消耗空,因为我们在不断的分配内存空间而不进行回收.除非内存无限大,我们可以任性的分配而不回收,但是事实并非如此.所以,垃圾回收是必须的. 二. ...

  4. python是不是特别垃圾-谈谈python垃圾回收机制

    什么是垃圾回收机制? 首先,咱先来解释名词,垃圾回收是不是就是将没用的,废弃的东西回收起来. 在坐的各位都没有女朋友对吧,那难以想象你们的房间会是一个什么样子,可能会有很多垃圾,很凌乱,自己也不收拾. ...

  5. Java垃圾回收(GC)机制详解

    Java垃圾回收(GC)机制详解 转自:https://www.cnblogs.com/xiaoxi/p/6486852.html 一.为什么需要垃圾回收 如果不进行垃圾回收,内存迟早都会被消耗空,因 ...

  6. 深入了解C#系列:谈谈C#中垃圾回收与内存管理机制

    今天抽空来讨论一下.Net的垃圾回收与内存管理机制,也算是完成上个<WCF分布式开发必备知识>系列后的一次休息吧.以前被别人面试的时候问过我GC工作原理的问题,我现在面试新人的时候偶尔也会 ...

  7. python如何进行垃圾回收_python垃圾回收机制

    一.引入 ​ 解释器在执行到定义变量的语法时,会申请内存空间来存放变量的值,而内存的容量是有限的,这就涉及到变量值所占用内存空间的回收问题,当一个变量值没有用了(简称垃圾)就应该将其占用的内存给回收掉 ...

  8. java list clear 垃圾回收_java垃圾回收机制

    1.什么是垃圾回收? 程序的运行必然需要申请内存资源,无效的对象资源如果不及时处理就会一直占有内存资源,最终将导数内存溢出,所以内存资源的管是非常重要了. 1.1.C/C++语言的垃圾回收 在C/C+ ...

  9. JVM垃圾回收机制GC理解

    目录 JVM垃圾回收 分代收集 如何识别垃圾 引用计数法 可达性分析法 引用关系四种类型: 强.软.弱.虚 强引用 软引用 SoftReference 弱引用 WeakReference WeakHa ...

  10. 垃圾回收器的基本原理是什么?垃圾回收器可以马上回收内存吗?有什么办法主动通知虚拟机进行垃圾回收?...

    一.垃圾回收器的基本原理是什么?垃圾回收器可以马上回收内存吗?有什么办法主动通知虚拟机进行垃圾回收?   1.对于GC来说,当程序员创建对象时,GC就开始监控这个对象的地址.大小以及使用情况. 通常, ...

最新文章

  1. Docker网络解决方案-Flannel部署记录
  2. 编程是一种对你的身体健康十分有害的工作
  3. 武汉大学计算机学院 曹老师,关于校园网吧建设的计算机网络综合设计.doc
  4. 中国电力行业运行形势及十四五供需状况分析报告2021-2027年
  5. oracle数据库计数器,DM 达梦数据库 表的 行计数器(COUNTER)属性
  6. 阿里云ACE共创空间——大数据方案体验1 日志服务
  7. appium java简单实例_Appium创建一个Note的实例
  8. MySQL数据库开发 (视频)
  9. 系统架构设计师面试java架构师 面试经验分享
  10. 什么是Maven以及Maven的优点有哪些?
  11. An Introduction to Unstructured Mesh Generation Methods and Softwares for Scientific Computing
  12. javascript 对后台返回的数据进行分类
  13. 跨网段和同网段的通信
  14. java 基础 String str= “abc god 中国 java“ 反转每个单词 结果: “cba dog 国中
  15. MSSQL2008 性能优化
  16. 行测-言语理解选词填空必备词语汇总
  17. Android 音视频深入 六 使用FFmpeg播放视频(附源码下载)
  18. 【RSA-Tool 2 by tE】的使用
  19. 【PAT甲级 - C++题解】1119 Pre- and Post-order Traversals
  20. 如何插入数学的花体和空心体字母

热门文章

  1. 初中英语语法(009)-动名词
  2. XCTF_MOBILE16_boomshakalaka-3
  3. ★三个和尚与机构臃肿的故事
  4. windows10 cortana 不能搜索解决办法
  5. TI DSP 5502定时器使用
  6. 巧用Mac上的Spotlight搜索
  7. 聆听音乐-推荐好听的歌曲
  8. 端午节之苍南懒人游 (*^__^*) ……
  9. .NET Runtime Optimization Service占用大量cpu问题处理windows2012
  10. OpenAi ChatGPT注册及使用教程