总结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
Oct 09 PHP
PHP的ASP防火墙
Oct 09 PHP
用 PHP5 轻松解析 XML
Dec 04 PHP
php中支持多种编码的中文字符串截取函数!
Mar 20 PHP
PHP图片等比例缩放生成缩略图函数分享
Jun 10 PHP
php中字符串和正则表达式详解
Oct 23 PHP
php实现字符串反转输出的方法
Mar 14 PHP
PHP输出一个等腰三角形的方法
May 12 PHP
JSON字符串传到后台PHP处理问题的解决方法
Jun 05 PHP
PHP不使用递归的无限级分类简单实例
Nov 05 PHP
使用Zttp简化Guzzle 调用
Jul 02 PHP
TP5框架安全机制实例分析
Apr 05 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
PHP 使用header函数设置HTTP头的示例解析 表头
2013/06/17 PHP
基于PHP读取csv文件内容的详解
2013/06/18 PHP
PHP之sprintf函数用法详解
2014/11/12 PHP
php使用google地图应用实例
2014/12/31 PHP
php生成固定长度纯数字编码的方法
2015/07/09 PHP
PHP实现的Redis多库选择功能单例类
2017/07/27 PHP
Thinkphp 3.2框架使用Redis的方法详解
2019/10/24 PHP
可以用来调试JavaScript错误的解决方案
2010/08/07 Javascript
javascript hashtable 修正版 下载
2010/12/30 Javascript
浅谈javascript对象模型和function对象
2014/12/26 Javascript
jQuery仿gmail实现fixed布局的方法
2015/05/27 Javascript
基于JavaScript实现 网页切出 网站title变化代码
2016/04/03 Javascript
Sequelize中用group by进行分组聚合查询
2016/12/12 Javascript
解决AngualrJS页面刷新导致异常显示问题
2017/04/20 Javascript
基于input框覆盖掉数字英文的实例讲解
2017/07/21 Javascript
详解vue-router 路由元信息
2017/09/13 Javascript
解决easyui日期时间框ie的兼容的问题
2018/03/01 Javascript
Makefile/cmake/node-gyp中区分判断不同平台的方法
2018/12/18 Javascript
微信小程序日历效果
2018/12/29 Javascript
使用Vue调取接口,并渲染数据的示例代码
2019/10/28 Javascript
解决vux 中popup 组件Mask 遮罩在最上层的问题
2020/11/03 Javascript
Tensorflow环境搭建的方法步骤
2018/02/07 Python
通过Py2exe将自己的python程序打包成.exe/.app的方法
2018/05/26 Python
在PyCharm中三步完成PyPy解释器的配置的方法
2018/10/29 Python
Python3爬虫mitmproxy的安装步骤
2020/07/29 Python
Perfume’s Club法国站:购买香水和化妆品
2019/05/02 全球购物
潘多拉珠宝美国官方网站:Pandora US
2020/06/18 全球购物
清洁工岗位职责
2014/01/29 职场文书
创业计划书模版
2014/02/05 职场文书
爱国主义演讲稿
2014/05/07 职场文书
个人求职信范文
2014/05/24 职场文书
优质服务口号
2014/06/11 职场文书
实习生矿工检讨书
2014/10/13 职场文书
离婚代理词范文
2015/05/23 职场文书
地道战观后感2000字
2015/06/04 职场文书
经典爱情感言
2015/08/03 职场文书