php 垃圾回收机制----写时复制和引用计数
PHP使用引用计数和写时复制来管理内存。写时复制保证了变量间复制值不浪费内存,引用计数保证了当变量不再需要时,将内存释放给操作系统。
要理解PHP内存管理,首先要理解一个概念----符号表。
符号表的概念:
一个变量有两部分组成:变量名和变量值。而符号表就是将变量名映射到内存中变量值所在地址的数组。
写时复制:
当一个变量的值复制到另一个变量时,PHP没有为复制值使用更多的内存。相反,他会跟新符号表来说明这两个变量拥有相同的内存块。所以下面的代码实际上并没有创建新数组:
$people = array( "Alice","Bob" );
$other = $people; //数组并没有被复制
?>
如果修改任何一个副本,PHP将分配所需的内存来进行复制:
$people[ 1 ] = "Tom"; //值改变,数组被复制,分配新的内存
通过延迟分配和复制,PHP在很多情形下节省了时间和内存,这就是写时复制。
引用计数:
符号表中没哟个职都有一个引用计数器,,它的值表示获取那片内存的方式的数目。
在给$people和$other初始化赋值后,数组指向符号表,$people和$other引用计数器的值为2.换句话说,那一片内存有两种方式可以得到:$people和$other。
但是当$people[ 1 ]的只改变之后,PHP为$people创建一个新的数组,这时,$people和$other的引用计数器的值都为1.当一个变量离开作用域,如函数参数和局部变量到达函数末尾时,应用计数器的值减去1.当一个变量在其他内存空间被赋值时,旧值得引用计数减1。当引用计数的值为0时,他的内存被释放。
这就是引用计数。
引用计数是首选的内存管理方式。保持变量作用域限制于函数中,通过值来传递,并让引用计数负责内存管理。如果你想主动获得更多的信息或者控制权来释放一个变量的值,可以使用isset()和unset()函数。
以上就介绍了php 垃圾回收机制----写时复制和引用计数,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

热AI工具

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

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

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

PHP 8.4 带来了多项新功能、安全性改进和性能改进,同时弃用和删除了大量功能。 本指南介绍了如何在 Ubuntu、Debian 或其衍生版本上安装 PHP 8.4 或升级到 PHP 8.4

CakePHP 是 PHP 的开源框架。它的目的是使应用程序的开发、部署和维护变得更加容易。 CakePHP 基于类似 MVC 的架构,功能强大且易于掌握。模型、视图和控制器 gu

登录 CakePHP 是一项非常简单的任务。您只需使用一项功能即可。您可以记录任何后台进程(如 cronjob)的错误、异常、用户活动、用户采取的操作。在 CakePHP 中记录数据很容易。提供了 log() 函数

Visual Studio Code,也称为 VS Code,是一个免费的源代码编辑器 - 或集成开发环境 (IDE) - 可用于所有主要操作系统。 VS Code 拥有针对多种编程语言的大量扩展,可以轻松编写

CakePHP 是一个开源MVC 框架。它使开发、部署和维护应用程序变得更加容易。 CakePHP 有许多库可以减少大多数常见任务的过载。
