php中用unset销毁变量并释放内存


Posted in PHP onMay 10, 2020

PHP的unset()函数用来清除、销毁变量,不用的变量,我们可以用unset()将它销毁。但是某些时候,用unset()却无法达到销毁变量占用的内存!

我们先看一个例子:

<?php
$s = str_repeat('1',255);  //产生由255个1组成的字符串
$m = memory_get_usage();  //获取当前占用内存
unset($s);
$mm = memory_get_usage();  //unset()后再查看当前占用内存
echo $m-$mm;
?>

最后输出unset()之前占用内存减去unset()之后占用内存,如果是正数,那么说明unset($s)已经将$s从内存中销毁(或者 说,unset()之后内存占用减少了),可是我在PHP5和windows平台下,得到的结果是:-48。

这是否可以说明,unset($s)并没有起 到销毁变量$s所占用内存的作用呢?我们再作下面的例子:

<?php
$s = str_repeat('1',256);  //产生由256个1组成的字符串
$m = memory_get_usage();  //获取当前占用内存
unset($s);
$mm = memory_get_usage();  //unset()后再查看当前占用内存
echo $m-$mm;
?>

这个例子,和上面的例子几乎相同,唯一的不同是,$s由256个1组成,即比第一个例子多了一个1,得到结果是:224。这是否可以说明,unset($s)已经将$s所占用的内存销毁了?

通过上面两个例子,我们可以得出以下结论:

结论一、unset()函数只能在变量值占用内存空间超过256字节时才会释放内存空间。

那么是不是只要变量值超过256,使用unset就可以释放内存空间呢?我们再通过一个例子来测试一下:

<?php
$s = str_repeat('1',256);    //这和第二个例子完全相同
$p = &$s;
$m = memory_get_usage();
unset($s);           //销毁$s
$mm = memory_get_usage();
echo $p . '<br />';
echo $m-$mm;
?>

刷新页面,我们看到第一行有256个1,第二行是-48,按理说我们已经销毁了$s,而$p只是引用$s的变量,应该是没有内容了,另外,unset($s)后内存占用却比unset()前增加了!现在我们再做以下的例子:

<?php
$s = str_repeat('1', 256);   //这和第二个例子完全相同
$p = &$s;
$m = memory_get_usage();
$s = null;           //设置$s为null
$mm = memory_get_usage();
echo $p . '<br />';
echo $m-$mm;
?>

现在刷新页面,我们看到,输出$p已经是没有内容了,unset()前后内存占用量之差是224,即已经清除了变量占用的内存。本例中的$s=null也可以换成unset(),如下:

<?php
$s = str_repeat('1', 256);   //这和第二个例子完全相同
$p = &$s;
$m = memory_get_usage();
unset($s);           //销毁$s
unset($p);
$mm = memory_get_usage();
echo $p . '<br />';
echo $m-$mm;
?>

我们将$s和$p都使用unset()销毁,这时再看内存占用量之差也是224,说明这样也可以释放内存。那么,我们可以得到另外一条结论:

结论二、只有当指向该变量的所有变量(如引用变量)都被销毁后,才会释放内存。

相信经过本文的例子后,大家应该对unset()有所了解了,最起码,本人用unset()也是为了在变量不起作用时,释放内存。

内容补充

php使用unset()删除数组中某个单元

unset既可以删除变量,也可以删除数组中某个单元。但要注意的是,数组不会重建索引。

实例如下:

<?php
$arr = array("朝阳区","海淀区","西城区","东城区","丰台区");
unset($arr[3]);
echo "<pre>";
print_r($arr);
?>

输出结果如下:

Array
(
 [0] => 朝阳区
 [1] => 海淀区
 [2] => 西城区
 [4] => 丰台区
)

到此这篇关于php中用unset销毁变量并释放内存的文章就介绍到这了,更多相关php如何用unset销毁变量并释放内存内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

PHP 相关文章推荐
PHP4实际应用经验篇(4)
Oct 09 PHP
vBulletin HACK----显示话题大小和打开新窗口于论坛索引页
Oct 09 PHP
又一个php 分页类实现代码
Dec 03 PHP
基于在生产环境中使用php性能测试工具xhprof的详解
Jun 03 PHP
PHP中$_SERVER的详细参数与说明介绍
Oct 26 PHP
PHP数据库链接类(PDO+Access)实例分享
Dec 05 PHP
Laravel 4 初级教程之安装及入门
Oct 30 PHP
windows下apache搭建php开发环境
Aug 27 PHP
PHP加密解密实例分析
Dec 25 PHP
PHP基于自增数据如何生成不重复的随机数示例
May 19 PHP
php 下 html5 XHR2 + FormData + File API 上传文件操作实例分析
Feb 28 PHP
PHP设计模式之命令模式示例详解
Dec 20 PHP
php屏蔽错误及提示的方法
May 10 #PHP
php判断数组是否为空的实例方法
May 10 #PHP
通过PHP实现获取访问用户IP
May 09 #PHP
如何通过PHP实现Des加密算法代码实例
May 09 #PHP
php变量与字符串的增删改查操作示例
May 07 #PHP
PHP数组与字符串互相转换实例
May 05 #PHP
禁止直接访问php文件代码分享
May 05 #PHP
You might like
php数组函数序列之array_keys() - 获取数组键名
2011/10/30 PHP
PHP实现的QQ空间g_tk加密算法
2015/07/09 PHP
PHP jQuery+Ajax结合写批量删除功能
2017/05/19 PHP
详细解读php的命名空间(二)
2018/02/21 PHP
基于swoole实现多人聊天室
2018/06/14 PHP
js文件中调用js的实现方法小结
2009/10/23 Javascript
下载网站打开页面后间隔多少时间才显示下载链接地址的代码
2010/04/25 Javascript
jquery的Theme和Theme Switcher使用小结
2010/09/08 Javascript
从零开始学习jQuery (六) jquery中的AJAX使用
2011/02/23 Javascript
node+express+ejs制作简单页面上手指南
2014/11/26 Javascript
JavaScript实现按照指定长度为数字前面补零输出的方法
2015/03/19 Javascript
JavaScript实现MIPS乘法模拟的方法
2015/04/17 Javascript
js实现点击文本框显示日期选择器特效代码分享
2020/05/21 Javascript
学习JavaScript鼠标响应事件
2015/12/25 Javascript
javascript函数命名的三种方式及区别介绍
2016/03/22 Javascript
jquery获取img的src值的简单实例
2016/05/17 Javascript
纯javaScript、jQuery实现个性化图片轮播【推荐】
2017/01/08 Javascript
JavaScript实现换肤功能
2017/09/15 Javascript
详解Angular-ui-BootStrap组件的解释以及使用
2018/07/13 Javascript
用webpack4开发小程序的实现方法
2019/06/04 Javascript
python使用webbrowser浏览指定url的方法
2015/04/04 Python
对Python3中的input函数详解
2018/04/22 Python
Python 查找list中的某个元素的所有的下标方法
2018/06/27 Python
Python 控制终端输出文字的实例
2019/07/12 Python
python类的实例化问题解决
2019/08/31 Python
Pandas对DataFrame单列/多列进行运算(map, apply, transform, agg)
2020/06/14 Python
安纳塔拉酒店度假村及水疗官方网站:Anantara Hotel
2016/08/25 全球购物
Java如何读取CLOB字段
2013/10/10 面试题
教育学习自我评价
2014/02/03 职场文书
物业保安员岗位职责
2014/03/14 职场文书
高中校园广播稿3篇
2014/09/29 职场文书
劳动保障事务所个人工作总结
2015/08/12 职场文书
大学生村官驻村工作心得体会
2016/01/23 职场文书
《普罗米修斯》教学反思
2016/02/22 职场文书
解决python绘图使用subplots出现标题重叠的问题
2021/04/30 Python
Go调用Rust方法及外部函数接口前置
2022/06/14 Golang