总结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 图像尺寸调整代码
May 26 PHP
DEDE采集大师官方留后门的删除办法
Jan 08 PHP
PHP下使用CURL方式POST数据至API接口的代码
Feb 14 PHP
PHP插入排序实现代码
Apr 04 PHP
解析数组非数字键名引号的必要性
Aug 09 PHP
php加密算法之实现可逆加密算法和解密分享
Jan 21 PHP
PHP中文编码小技巧
Dec 25 PHP
php实现判断访问来路是否为搜索引擎机器人的方法
Apr 15 PHP
基于PHP技术开发客服工单系统
Jan 06 PHP
PHP购物车类Cart.class.php定义与用法示例
Jul 20 PHP
php 的反射详解及示例代码
Aug 25 PHP
如何在PHP中生成随机数
Jun 04 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
全国FM电台频率大全 - 22 重庆市
2020/03/11 无线电
利用PHP获取网站访客的所在地位置
2017/01/18 PHP
php高性能日志系统 seaslog 的安装与使用方法分析
2020/02/29 PHP
PHP PDO操作总结
2014/11/17 Javascript
jQuery制作简洁的多级联动Select下拉框
2014/12/23 Javascript
JavaScript实现上下浮动的窗口效果代码
2015/10/12 Javascript
javascript性能优化之DOM交互操作实例分析
2015/12/12 Javascript
jQuery实现的浮动层div浏览器居中显示效果
2017/02/03 Javascript
Bootstrap响应式导航由768px变成992px的实现代码
2017/06/15 Javascript
JS失效 提示HTML1114: (UNICODE 字节顺序标记)的代码页 utf-8 覆盖(META 标记)的冲突的代码页 utf-8
2017/06/23 Javascript
vue多页面开发和打包正确处理方法
2018/04/20 Javascript
vue.js使用watch监听路由变化的方法
2018/07/08 Javascript
浅析JS中回调函数及用法
2018/07/25 Javascript
Vue父子组件双向绑定传值的实现方法
2018/07/31 Javascript
JavaScript实用代码小技巧
2018/08/23 Javascript
vue使用echarts图表的详细方法
2018/10/22 Javascript
微信小程序+腾讯地图开发实现路径规划绘制
2019/05/22 Javascript
vue + node如何通过一个Txt文件批量生成MP3并压缩成Zip
2020/06/02 Javascript
python 读取excel文件生成sql文件实例详解
2017/05/12 Python
pyqt5 使用label控件实时显示时间的实例
2019/06/14 Python
详解numpy矩阵的创建与数据类型
2019/10/18 Python
Django REST framework 单元测试实例解析
2019/11/07 Python
wxPython绘图模块wxPyPlot实现数据可视化
2019/11/19 Python
HTML5几个设计和修改的页面范例分享
2015/09/29 HTML / CSS
基于HTML5陀螺仪实现ofo首页眼睛移动效果的示例
2017/07/31 HTML / CSS
微信端html5页面调用分享接口示例
2018/03/14 HTML / CSS
美国咖啡批发网站:Coffee.org
2017/06/29 全球购物
环境整治工作方案
2014/05/18 职场文书
超市店庆活动方案
2014/08/31 职场文书
干部作风整顿自我剖析材料和整改措施
2014/09/18 职场文书
小浪底导游词
2015/02/12 职场文书
学术会议通知范文
2015/04/15 职场文书
班级元旦晚会开幕词
2016/03/04 职场文书
2019年入党思想汇报格式与要求
2019/06/25 职场文书
css3新特性的应用示例分析
2022/03/16 HTML / CSS
Python+Tkinter制作专属图形化界面
2022/04/01 Python