首页 后端开发 php教程 PHP unset销毁变量并释放内存

PHP unset销毁变量并释放内存

Aug 08, 2016 am 09:21 AM
echo get memory unset usage

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

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

最后输出unset()之前占用内存减去unset()之后占用内存,如果是正数,那么说明unset($s)已经将$s从内存中销毁(或者说,unset()之后内存占用减少了),可是我在PHP5和windows平台下,得到的结果是:-48。这是否可以说明,unset($s)并没有起到销毁变量$s所占用内存的作用呢?我们再作下面的例子:

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

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

通过上面两个例子,我们可以得出以下结论:结论一、unset()函数只能在变量值占用内存空间超过256字节时才会释放内存空间。

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

  1. $s=str_repeat('1',256); //这和第二个例子完全相同
  2. $p=&$s;
  3. $m=memory_get_usage();
  4. unset($s); //销毁$s
  5. $mm=memory_get_usage();
  6. echo$p.'
    '
    ;
  7. echo$m-$mm;
  8. ?>

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

  1. $s=str_repeat('1',256); //这和第二个例子完全相同
  2. $p=&$s;
  3. $m=memory_get_usage();
  4. $s=null; //设置$s为null
  5. $mm=memory_get_usage();
  6. echo$p.'
    '
    ;
  7. echo$m-$mm;
  8. ?>

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

  1. $s=str_repeat('1',256); //这和第二个例子完全相同
  2. $p=&$s;
  3. $m=memory_get_usage();
  4. unset($s); //销毁$s
  5. unset($p);
  6. $mm=memory_get_usage();
  7. echo$p.'
    '
    ;
  8. echo$m-$mm;
  9. ?>

我们将$s和$p都使用unset()销毁,这时再看内存占用量之差也是224,说明这样也可以释放内存。那么,我们可以得到另外一条结论:结论二、只有当指向该变量的所有变量(如引用变量)都被销毁后,才会释放内存。

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

以上就介绍了PHP unset销毁变量并释放内存,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

<🎜>:泡泡胶模拟器无穷大 - 如何获取和使用皇家钥匙
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系统,解释
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆树的耳语 - 如何解锁抓钩
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

Java教程
1673
14
CakePHP 教程
1428
52
Laravel 教程
1333
25
PHP教程
1277
29
C# 教程
1257
24
适用于台式电脑的 CAMM2:MSI 解释了游戏塔新 RAM 标准的优势 适用于台式电脑的 CAMM2:MSI 解释了游戏塔新 RAM 标准的优势 Aug 17, 2024 pm 06:47 PM

第一批用于笔记本电脑的 LPCAMM2 模块已经交付,预计未来台式机主板也将配备 CAMM2。 CAMM2和LPCAMM2彼此不兼容,即使在台式电脑上,客户也需要小心

如何使用PowerShell自动执行任务 如何使用PowerShell自动执行任务 Feb 20, 2024 pm 01:51 PM

如果您是IT管理员或技术专家,您一定意识到自动化的重要性。尤其对于Windows用户来说,MicrosoftPowerShell是最佳的自动化工具之一。微软为满足您的自动化需求提供了各种工具,无需安装第三方应用程序。本指南将详细介绍如何利用PowerShell自动化执行任务。什么是PowerShell脚本?如果您有使用PowerShell的经验,您可能已经使用过命令来配置您的操作系统。脚本是.ps1文件中这些命令的集合。.ps1文件包含由PowerShell执行的脚本,例如基本的Get-Help

java如何发起http请求调用post与get接口 java如何发起http请求调用post与get接口 May 16, 2023 pm 07:53 PM

一、java调用post接口1、使用URLConnection或者HttpURLConnectionjava自带的,无需下载其他jar包URLConnection方式调用,如果接口响应码被服务端修改则无法接收到返回报文,只能当响应码正确时才能接收到返回publicstaticStringsendPost(Stringurl,Stringparam){OutputStreamWriterout=null;BufferedReaderin=null;StringBuilderresult=newSt

MySQL储存引擎选型对比:InnoDB、MyISAM与Memory性能指标评估 MySQL储存引擎选型对比:InnoDB、MyISAM与Memory性能指标评估 Jul 26, 2023 am 11:25 AM

MySQL储存引擎选型对比:InnoDB、MyISAM与Memory性能指标评估引言:在MySQL数据库中,储存引擎的选择对于系统性能和数据完整性起着至关重要的作用。MySQL提供了多种储存引擎,其中最常用的引擎包括InnoDB、MyISAM和Memory。本文将就这三种储存引擎进行性能指标评估,并通过代码示例进行比较。一、InnoDB引擎InnoDB是My

五个精选的Go语言开源项目,带你探索技术世界 五个精选的Go语言开源项目,带你探索技术世界 Jan 30, 2024 am 09:08 AM

在当今科技快速发展的时代,编程语言也如雨后春笋般涌现出来。其中一门备受瞩目的语言就是Go语言,它以其简洁、高效、并发安全等特性受到了许多开发者的喜爱。Go语言以其强大的生态系统而著称,其中有许多优秀的开源项目。本文将介绍五个精选的Go语言开源项目,带领读者一起探索Go语言开源项目的世界。KubernetesKubernetes是一个开源的容器编排引擎,用于自

Laravel开发:如何使用Laravel Echo和Pusher实现WebSockets通信? Laravel开发:如何使用Laravel Echo和Pusher实现WebSockets通信? Jun 13, 2023 pm 05:01 PM

Laravel是一个流行的PHP框架,具有高度可扩展性和高效性,它提供了很多强大的工具和库,让开发者可以快速构建高质量的Web应用程序。其中,LaravelEcho和Pusher是两个非常重要的工具,通过它们可以很容易地实现WebSockets通信,本文将详细介绍如何在Laravel应用程序中使用这两个工具。什么是WebSockets?WebSockets

市面上最流行的golang框架有哪些? 市面上最流行的golang框架有哪些? Jun 01, 2024 pm 08:05 PM

目前最流行的Go框架有:Gin:轻量级、高性能的Web框架,简洁易用。Echo:快速、高度可定制的Web框架,提供高性能路由和中间件。GorillaMux:快速、灵活的多路复用器,提供高级路由配置选项。Fiber:性能优化的高性能Web框架,处理高并发请求。Martini:面向对象设计的模块化Web框架,提供丰富的功能集。

PHP中echo关键字的作用和使用方法详解 PHP中echo关键字的作用和使用方法详解 Jun 28, 2023 pm 08:12 PM

PHP中echo关键字的作用和使用方法详解PHP是一种广泛使用的服务器端脚本语言,它在网页开发中被广泛应用。而echo关键字是在PHP中用于输出内容的一种方法。本文将详细介绍echo关键字的作用和使用方法。作用:echo关键字的主要作用是将内容输出到浏览器。在网页开发中,我们需要将数据动态地呈现到前端页面上,这时就可以使用echo关键字将数据输出到页面上。e

See all articles