PHP垃圾回收机制理解

使用的是“引用计数”方式进行回收。简单地理解的话,就是每个分配的内存区域都有一个计数器,记录有多少个变量指针指向这片内存。当指向该片内存的指针数量为0,那么该片内存区域就可以被回收。
 
引用计数计数简单,强大,但是有一个致命的缺陷,就是环状引用。考虑以下的代码:
 
Php代码 
$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才是王道!

转载于:https://www.cnblogs.com/zhangyuhang3/p/6873619.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/572447.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

枚举的用法

概念: 为了间接的表示一些固定的值,Java就给提供了枚举,是指将变量的值一一列出来,变量的值只限于列举出来的值的范围内、 特点: 所有枚举类都是Enum的子类我们可以通过”枚举类名.枚举项名称”去访问指定的枚举项每一个枚举项其实…

在php中创建三个表格,创建新工作表PHPExcel

我正在尝试创建另一个工作表,一切正常.但我现在需要的是根据变量创建1.例如 :我有两个选项用于验证,一个用于结果.一切都由一个名为$resultado的布尔变量来约束.我在CakePHP中有我的组件function ExcelCargaMasivaComponent() {$this->xls new PHPExcel();$this…

java.lang.String类

复制下来的java.lang.String源码。在此基础上添加自己的注释,偷懒了,用来加深印象吧。英语不好,没有翻译,不理解的方法直接百度的。然后按照自己的理解描述。/** (#)String.java 1.205 09/02/26** Copyright 2006 Sun Microsys…

面向对象-多态

概念 多态是指同一行为,具有多个不同表现形式 多态是除封装、继承之后面向对象的第三大特征。 多态是出现在继承或者实现关系中的 使用多态有什么前提 要有继承或实现关系要有方法的重写要有父类引用指向子类对象 子类对象是可以赋值给父类类型的变量。例如Animal是…

php 区位码字符,php汉字如何转区位码

php汉字转区位码的方法:首先创建一个PHP示例文件;然后通过“sprintf("%02d%02d",ord($t1[0])-160,ord($t1[1])-160);”方法实现汉字转区位码即可。推荐:《PHP视频教程》PHP中实现汉字转区位码应用源码实例解析PHP里如何实现汉字转区…

ssh(struts,spring,hibernate)开发的初步集成01--依赖

一.概念 SSH 通常指的是 Struts2 做前端控制器,spring 管理各层的组件,hibernate 负责持久化层。 SSM 则指的是 SpringMVC 做前端控制器,Spring 管理各层的组件,MyBatis 负责持久化层。 二.构建流程 创建maven工程...在pom.xml文件…

频谱扩展 matlab,简单的直接扩展频谱通信系统仿真分析

随着通信技术的迅猛发展,扩展频谱通信技术的优点已经越来越明显并被接受,并在各个领域得到了广泛的应用。同时随着计算机技术和仿真技术的日益发展和应用,如何应用一些方便、友好的软件对通信系统进行直观的模型仿真,并进行仿真结…

内部类怎么用

内部类: 在一个类中定义一个类。 举例:在一个类A的内部定义一个类B,类B就被称为内部类 // 格式: class 外部类名{ 修饰符 class 内部类名{ } } class A{public class B {}}内部类的访问特点: 内部类可以直接访问外部类…

一个css3特效

转载于:https://www.cnblogs.com/xiongwei2017/p/6877393.html

matlab保存格式可以用cad打开文件,怎么将TXT文件导入CAD中生成图形

我们可以先把TXT文件转换成WORD或是EXCEL表格里。然后再把转换后的WORD或是EXCEL表格导入到CAD图纸中。这里以迅捷CAD编辑器为例,演示如下:步骤一:还是需要在电脑桌面上安装迅捷CAD编辑器。并进入到软件的操作界面。步骤二:双击打…

[Hnoi2006]马步距离

1285: [Hnoi2006]马步距离 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 36 Solved: 16[Submit][Status][Web Board]Description 在国际象棋和中国象棋中,马的移动规则相同,都是走“日”字,我们将这种移动方式称为马步移动。如右图所示&…

包装类(自动拆箱与自动装箱)

概念: 基本数据类型有8种.基本数据类型效率高,但是功能及其有限,只能做加减乘除运算.为了对基本数据类型进行更多的操作,Java为每种基本数据类型提供了对应的类(包装类), 作用: 用于基本数据类型与字符串之间的转换 将基本数据类型封装成对象…

php scrscriptipt,XSS挑战之旅闯关笔记

环境自己搭建~~好嚣张:1.http://127.0.0.1:8024/xss/level1.php?nametest 这是URL 看到后面name有参数传递,不多想直接尝试xss。没有任何过滤。payload :http://127.0.0.1:8024/xss/level1.php?name2.http://127.0.0.1:8024/xss/level2.ph…

CentOS7 防火墙规则 (firewalld)

1、firewalld的基本使用启动: systemctl start firewalld查看状态: systemctl status firewalld 停止: systemctl disable firewalld禁用: systemctl stop firewalld2.systemctl是CentOS7的服务管理工具中主要的工具,它…

matlab图像信息熵交叉熵,【机器学习】信息量,信息熵,交叉熵,KL散度和互信息(信息增益)...

首先先强烈推荐一篇外文博客Visual Information Theory这个博客的博主colah是个著名的计算机知识科普达人,以前很是著名的那篇LSTM讲解的文章也是他写的。这篇文章详细讲解了信息论中许多基本概念的前因后果,并且很是的直观用了大量的图片,和…

第2章第1讲数据类型及常量变量

#include"stdio.h"main() {printf("I love music!\n");printf("the music is \"D:\\music\\love.mp3\".\n");} #include "stdio.h" #define PI 3.14 //符号常量 main() {float r,area; …

java嵌套对象,java – 从嵌套流中收集一组对象

我有一个场景,我有两个for循环,一个嵌套在另一个.在内部循环中,对于每次迭代,我都有创建特定类型的新实例所需的信息.我想将代码从for循环更改为使用流,因此我可以将所有对象收集到ImmutableSet中.但是,我无法制作一个编译和工作的版本.下面的示例程序说明了我最接近的尝试.它编…

v$session v$session_wait

(1)v$session v$session视图记录了当前连接到数据库的session信息 ColumnDescriptionSADDRsession addressSIDSession identifierSERIAL#session序列号,当某个session结束,另一个新开始的session使用了前者的sid,则此数值自加1AUDSIDauditing…

数据结构有哪些

概念: 数据结构 : 数据用什么样的方式组合在一起。 数据结构是计算机存储数据的方式,指相互之间存在一种或多种特定关系的数据元素集合 常见数据结构: 数据存储的常用结构有:栈、队列、数组、链表和红黑树。 栈: stack…

matlab自考本科真题,行政管理学自考专科试题及答案

参考答案如下检查髌腱炎患者时可以发现()。A、行政学自股四头肌萎缩B、渗出C、髌反射低下D、Mcmurray试验时有卡嗒声/疼痛患者,管理男,30岁,患甲状腺功能亢进症,突然出现双下肢不能动。检查:双下肢膝腱反射…