php垃圾回收,PHP垃圾回收机制的理解
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垃圾回收机制的理解相关推荐
- python 垃圾回收器_Python 垃圾回收机制详细
引用计数 Python语言默认采用的垃圾收集机制是『引用计数法 Reference Counting』,该算法最早George E. Collins在1960的时候首次提出,50年后的今天,该算法依然 ...
- java 强制垃圾回收_Java垃圾回收机制
Java垃圾回收机制 垃圾回收机制用到finalize.当程序创建对象.数组等引用类型实体时,系统都会在堆内存中为之分配一块内存区,对象就保存在这块内存中,当这块内存不再被任何引用变量引用时,这块内存 ...
- JAVA之JVM垃圾回收(GC)机制详解
一.为什么需要垃圾回收 如果不进行垃圾回收,内存迟早都会被消耗空,因为我们在不断的分配内存空间而不进行回收.除非内存无限大,我们可以任性的分配而不回收,但是事实并非如此.所以,垃圾回收是必须的. 二. ...
- python是不是特别垃圾-谈谈python垃圾回收机制
什么是垃圾回收机制? 首先,咱先来解释名词,垃圾回收是不是就是将没用的,废弃的东西回收起来. 在坐的各位都没有女朋友对吧,那难以想象你们的房间会是一个什么样子,可能会有很多垃圾,很凌乱,自己也不收拾. ...
- Java垃圾回收(GC)机制详解
Java垃圾回收(GC)机制详解 转自:https://www.cnblogs.com/xiaoxi/p/6486852.html 一.为什么需要垃圾回收 如果不进行垃圾回收,内存迟早都会被消耗空,因 ...
- 深入了解C#系列:谈谈C#中垃圾回收与内存管理机制
今天抽空来讨论一下.Net的垃圾回收与内存管理机制,也算是完成上个<WCF分布式开发必备知识>系列后的一次休息吧.以前被别人面试的时候问过我GC工作原理的问题,我现在面试新人的时候偶尔也会 ...
- python如何进行垃圾回收_python垃圾回收机制
一.引入 解释器在执行到定义变量的语法时,会申请内存空间来存放变量的值,而内存的容量是有限的,这就涉及到变量值所占用内存空间的回收问题,当一个变量值没有用了(简称垃圾)就应该将其占用的内存给回收掉 ...
- java list clear 垃圾回收_java垃圾回收机制
1.什么是垃圾回收? 程序的运行必然需要申请内存资源,无效的对象资源如果不及时处理就会一直占有内存资源,最终将导数内存溢出,所以内存资源的管是非常重要了. 1.1.C/C++语言的垃圾回收 在C/C+ ...
- JVM垃圾回收机制GC理解
目录 JVM垃圾回收 分代收集 如何识别垃圾 引用计数法 可达性分析法 引用关系四种类型: 强.软.弱.虚 强引用 软引用 SoftReference 弱引用 WeakReference WeakHa ...
- 垃圾回收器的基本原理是什么?垃圾回收器可以马上回收内存吗?有什么办法主动通知虚拟机进行垃圾回收?...
一.垃圾回收器的基本原理是什么?垃圾回收器可以马上回收内存吗?有什么办法主动通知虚拟机进行垃圾回收? 1.对于GC来说,当程序员创建对象时,GC就开始监控这个对象的地址.大小以及使用情况. 通常, ...
最新文章
- Docker网络解决方案-Flannel部署记录
- 编程是一种对你的身体健康十分有害的工作
- 武汉大学计算机学院 曹老师,关于校园网吧建设的计算机网络综合设计.doc
- 中国电力行业运行形势及十四五供需状况分析报告2021-2027年
- oracle数据库计数器,DM 达梦数据库 表的 行计数器(COUNTER)属性
- 阿里云ACE共创空间——大数据方案体验1 日志服务
- appium java简单实例_Appium创建一个Note的实例
- MySQL数据库开发 (视频)
- 系统架构设计师面试java架构师 面试经验分享
- 什么是Maven以及Maven的优点有哪些?
- An Introduction to Unstructured Mesh Generation Methods and Softwares for Scientific Computing
- javascript 对后台返回的数据进行分类
- 跨网段和同网段的通信
- java 基础 String str= “abc god 中国 java“ 反转每个单词 结果: “cba dog 国中
- MSSQL2008 性能优化
- 行测-言语理解选词填空必备词语汇总
- Android 音视频深入 六 使用FFmpeg播放视频(附源码下载)
- 【RSA-Tool 2 by tE】的使用
- 【PAT甲级 - C++题解】1119 Pre- and Post-order Traversals
- 如何插入数学的花体和空心体字母
热门文章
- 初中英语语法(009)-动名词
- XCTF_MOBILE16_boomshakalaka-3
- ★三个和尚与机构臃肿的故事
- windows10 cortana 不能搜索解决办法
- TI DSP 5502定时器使用
- 巧用Mac上的Spotlight搜索
- 聆听音乐-推荐好听的歌曲
- 端午节之苍南懒人游 (*^__^*) ……
- .NET Runtime Optimization Service占用大量cpu问题处理windows2012
- OpenAi ChatGPT注册及使用教程