总结PHP内存释放以及垃圾回收


Posted in PHP onMarch 29, 2018

引用赋值

$a = 'apple';
$b = &$a;

上述代码中,我将一个字符串赋值给变量a,然后将a的引用赋值给了变量b。显然,这个时候的内存指向应该是这样的:

$a -> 'apple' <- $b

a和b指向了同一块内存区域,我们通过 var_dump($a, $b) 得到 string(5) "apple" string(5) "apple" ,这是我们预期的结果。

unset 函数

假如我想将 'apple' 这个字符串从内存中释放掉。我是这么做的:

unset($a);

但是通过再次打印 $a $b 两变量的信息,我得到了这样的结果:Notice: Undefined variable: a 和 string(5) "apple" 。奇怪,$a $b 同时指向一块内存区域,又明明将$a释放了,为什么$b还是'apple'。

其实是这样的,unset()这是将一个变量指针销毁了,并没有释放掉那块内存区域中存放的字符串,所以执行完操作之后,内存指向只是变成了这样:

'apple' <- $b

要牢记重点: unset()并没有释放变量所指向的那块内存,而只是将变量指针销毁了。同时,将那块内存的 引用计数 减1,当引用计数为0时,也就是说当那块内存不被任何变量引用时,便会触发php的垃圾回收。

直接回收

那要怎样做才能真正释放掉 'apple' 所占用的内存呢?

利用上述方法,我们可以在 unset($a) 之后再 unset($b) ,将内存区域的所有引用都销毁,引用计数减为0了,自然就被php回收了。

当然,还有更直接的方法:

$a = null;

直接赋值 null 会将将 $a 所指向的内存区域置空,并将引用计数归零,内存便被释放。

脚本执行结束

php是脚本语言,当脚本执行结束之后,脚本内使用的所有内存都会被释放。

PHP 相关文章推荐
PHP中的日期处理方法集锦
Jan 02 PHP
PHP垃圾回收机制简单说明
Jul 22 PHP
php小型企业库存管理系统的设计与实现代码
May 16 PHP
php中get_object_vars()方法用法实例
Feb 08 PHP
php获得文件大小和文件创建时间的方法
Mar 13 PHP
PHP获取毫秒级时间戳的方法
Apr 15 PHP
ThinkPHP框架里隐藏index.php
Apr 12 PHP
php实现在线通讯录功能(附源码)
May 13 PHP
PHP  Yii清理缓存的实现方法
Nov 10 PHP
php使用GD2绘制几何图形示例
Feb 15 PHP
PHP实现的DES加密解密封装类完整实例
Apr 29 PHP
laravel框架数据库操作、查询构建器、Eloquent ORM操作实例分析
Dec 20 PHP
PHP+Ajax实现的博客文章添加类别功能示例
Mar 29 #PHP
PHP使用文件锁解决高并发问题示例
Mar 29 #PHP
PHP实现微信支付(jsapi支付)流程步骤详解
Mar 15 #PHP
PHP实现的数组和XML文件相互转换功能示例
Mar 15 #PHP
PHP实现用户异地登录提醒功能的方法【基于thinkPHP框架】
Mar 15 #PHP
laravel框架关于搜索功能的实现
Mar 15 #PHP
PHP实现浏览器中直接输出图片的方法示例
Mar 14 #PHP
You might like
从零开始 教你如何搭建Discuz!4.1论坛
2006/07/07 PHP
thinkphp3.x连接mysql数据库的方法(具体操作步骤)
2016/05/19 PHP
常用PHP封装分页工具类
2017/01/14 PHP
Nigma vs Alliance BO5 第一场2.14
2021/03/10 DOTA
如何用javascript判断录入的日期是否合法
2007/01/08 Javascript
基于jquery的使ListNav兼容中文首字拼音排序的实现代码
2011/07/10 Javascript
js清除input中type等于file的值域(示例代码)
2013/12/24 Javascript
jQuery实现ctrl+enter(回车)提交表单
2015/10/19 Javascript
Seajs 简易文档 提供简单、极致的模块化开发体验
2016/04/13 Javascript
JS/jQuery判断DOM节点是否存在的简单方法
2016/11/24 Javascript
JS表单验证方法实例小结【电话、身份证号、Email、中文、特殊字符、身份证号等】
2017/02/14 Javascript
Vue2.0 UI框架ElementUI使用方法详解
2017/04/14 Javascript
js数字滑动时钟的简单实现(示例讲解)
2017/08/14 Javascript
浅谈在Vue-cli里基于axios封装复用请求
2017/11/06 Javascript
Angular 组件之间的交互的示例代码
2018/03/24 Javascript
vue实现form表单与table表格的数据关联功能示例
2019/01/29 Javascript
js实现查询商品案例
2020/07/22 Javascript
JavaScript文档加载模式以及元素获取
2020/07/28 Javascript
详解python之配置日志的几种方式
2017/05/22 Python
python-docx修改已存在的Word文档的表格的字体格式方法
2018/05/08 Python
Python+selenium 获取浏览器窗口坐标、句柄的方法
2018/10/14 Python
python 异或加密字符串的实例
2018/10/14 Python
解决Python设置函数调用超时,进程卡住的问题
2019/08/08 Python
获取Pytorch中间某一层权重或者特征的例子
2019/08/17 Python
CSS3 translate导致字体模糊的实例代码
2019/08/30 HTML / CSS
HTML5 本地存储 LocalStorage详解
2016/06/24 HTML / CSS
美国名牌香水折扣网站:Hottperfume
2021/02/10 全球购物
PHP中如何创建和修改数组
2012/05/02 面试题
Linux常见面试题
2016/10/04 面试题
鲜果饮品店创业计划书
2014/01/21 职场文书
社区健康教育实施方案
2014/03/18 职场文书
寄语学生的话
2014/04/10 职场文书
社区巾帼文明岗事迹材料
2014/06/03 职场文书
雷峰塔导游词
2015/02/09 职场文书
2015团员个人年度总结
2015/11/24 职场文书
Win11电源已接通但未充电怎么办?Win11电源已接通未充电的解决方法
2022/04/05 数码科技