php程序员的笔记

  • 网站首页
  • PHP笔记
    • 字符串处理
    • php函数总结
    • 正则表达式
    • 模板框架使用
    • 我的网站模板笔记
    • Ecshop二次开发笔记
    • php源码下载
  • 数据库教程
    • MySQL数据库
    • MongoDB
    • Access数据库
    • Redis
  • JavaScript教程
    • Jquery基础
    • Jquery特效
    • JS常用函数
    • 开源插件开发
    • 谷歌地图开发
  • HTML教程
    • DIV+CSS技术篇
    • 网站优化笔记
    • HTML5 技术
  • 操作系统技巧
    • windows 7系统篇
    • Linux操作系统篇
    • 服务器
  • 互联网资讯
    • 生活杂侃
php程序员的笔记 -> PHP笔记 -> php函数总结 -> PHP unset销毁变量并释放内存

PHP unset销毁变量并释放内存

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对变量进行序列化的方法大比拼 php四种序列化变量的方法
  • PHP压缩html网页代码减小网络数据传输量,清除空格,制表符,注释标记
  • php利用session_set_save_handler()函数将session保存到MySQL数据库中
  • 用PHP函数memory_get_usage获取当前PHP内存消耗量以实现程序的性能优化
  • PHP记录搜索引擎来路以及搜索输入的关键字
  • php获取目录所有文件并将结果保存到数组的程序
  • PHP常用的判断变量的函数
  • smarty模板中使用php函数以及smarty模板中如何对一个变量使用多个函数
转载请注明出处:php程序员的笔记
本文永久地址:http://www.phpernote.com/php-function/1244.html
发布时间:2016 年 03 月 02 日 16 时 28 分 08 秒     文章来源:-わ千与千寻
上一篇:CentOS_6.5安装Nginx+PHP+MySQL分享
下一篇:linux下进入带空格目录的方法
热门文章
  • PHP获取当前时间、时间戳方法大总结
  • php获取远程图片并下载保存到本地
  • php优化压缩的图片
  • php提取字符串中的数字
  • php购物车类
  • PHP判断浏览器类型
随机文章
  • php const和define的区别(php类中如何定义常量)
  • php如何知道一个类共有多少方法(包括继承的)
  • It is not safe to rely on the system's timezone settings....的解决办法
  • php判断json格式是否正确和是否为json格式的方法
  • thinkphp更新数据库的五种方法
  • php返回json数据中文显示不友好的问题的解决办法
  • 周热门文章
    • php判断变量类型常用方法
    • php二维数组去掉重复值的方法总结
    • php获取客户端真实ip地址的三种方法
    • PHP获取当前服务器详细信息
    • php在数组中查找某个值是否存在(in_array(),array_search(),array_key_exists())
    • php模拟发送get请求
    • php提示Maximum execution time of 30 seconds exceeded...错误的解决办法
    • php解析url (parse_url) 参数成数组 (parse_str)
    • php获取本周和上周的开始日期和结束日期
    • PHP的Try, throw 和 catch简单用法

All rights reserved. Design by -わ千与千寻.  京ICP备16025782号-1网站地图  友情连接有话要说私人建站招募投稿  广告服务  互联网工具大全