摘要:向系统进行的内存申请,并不是有需要时向系统即时申请,而是由的最底层层先向系统申请一大块的内存,通过对上面三种列表的填充,建立一个类似于内存池的管理机制。在程序运行需要使用内存的时候,会在内存池中分配相应的内存供使用。
一、php内存管理概述——Zend引擎
由于计算机的内存由操作系统进行管理,所以普通应用程序是无法直接对内存进行访问的。
应用程序只能向操作系统申请内存,通常的应用也是这么做的,在需要的时候通过类似malloc之类的库函数 向操作系统申请内存。
在一些对性能要求较高的应用场景下是需要频繁的使用和释放内存的, 比如Web服务器,编程语言等,由于向操作系统申请内存空间会引发系统调用, 系统调用和普通的应用层函数调用性能差别非常大,因为系统调用会将CPU从用户态切换到内核, 因为涉及到物理内存的操作,只有操作系统才能进行,而这种切换的成本是非常大的, 如果频繁的在内核态和用户态之间切换会产生性能问题。
鉴于系统调用的开销,一些对性能有要求的应用通常会自己在用户态进行内存管理, 例如第一次申请稍大的内存留着备用,而使用完释放的内存并不是马上归还给操作系统, 可以将内存进行复用,这样可以避免多次的内存申请和释放所带来的性能消耗。
PHP不需要显式的对内存进行管理,这些工作都由Zend引擎进行管理了。PHP内部有一个内存管理体系, 它会自动将不再使用的内存垃圾进行释放。
二、php中查看与设置内存的相关参数与函数
配置内存大小:
(1)php.ini中可以更改配置memory_limit = 32M (2)若环境中没有禁用ini_set()函数,可以通过此函数设置:ini_set("memory_limit", "128M");
查看内存情况:
(1)memory_get_usage(),这个函数的作用是获取 目前PHP脚本所用的内存大小。 (2)memory_get_peak_usage(),这个函数的作用返回 当前脚本到目前位置所占用的内存峰值,这样就可能获取到目前的脚本的内存需求情况。三、ZendMM内存分配和销毁
PHP底层对内存的管理, 围绕着小块内存列表(free_buckets)、 大块内存列表(large_free_buckets)和 剩余内存列表(rest_buckets)三个列表来分层进行的。
ZendMM向系统进行的内存申请,并不是有需要时向系统即时申请, 而是由ZendMM的最底层(heap层)先向系统申请一大块的内存,通过对上面三种列表的填充, 建立一个类似于内存池的管理机制。
在程序运行需要使用内存的时候,ZendMM会在内存池中分配相应的内存供使用。 这样做的好处是避免了PHP向系统频繁的内存申请操作。
ZendMM在内存销毁的处理上采用与内存申请相同的策略,当程序unset一个变量或者是其他的释放行为时, ZendMM并不会直接立刻将内存交回给系统,而是只在自身维护的内存池中将其重新标识为可用, 按照内存的大小整理到上面所说的三种列表(small,large,free)之中,以备下次内存申请时使用。
具体的详情可参考:http://www.php-internals.com/...
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/31117.html
摘要:分页管理先说说虚拟内存的概念。每个存在的虚拟页面都保存在某个区域中,不属于任何一个区域的虚拟页是不存在的,不能被进程使用内核为系统中的每个进程维护一个单独的任务结构,任务中的一个字段指向,他描述了虚拟内存的当前状态。 作者: 顺风车运营研发团队 李乐 第一章 从操作系统内存管理说起 程序是代码和数据的集合,进程是运行着的程序;操作系统需要为进程分配内存;进程运行完毕需要释放内存;内存管...
摘要:当客户端请求到达时,进程管理器选择并连接到一个解释器。什么是是一个管理器,是只用于的可以在下载得到其实是源代码的一个补丁,旨在将进程管理整合进包中。与功能比较都是守护的进程管理器。 什么是CGI CGI全称是公共网关接口(Common Gateway Interface),HTTP服务器与你的或其它机器上的程序进行交谈的一种工具,其程序须运行在网络服务器上。 CGI可以用任何一种语言编...
摘要:的工作原理启动时载入进程管理器或进程管理器自身初始化,启动多个解释器进程可见多个并等待来自的连接。当客户端请求到达时,进程管理器选择并连接到一个解释器。什么是是一个管理器,是只用于的其实是源代码的一个补丁,旨在将进程管理整合进包中。 什么是CGI CGI全称是公共网关接口(Common Gateway Interface),HTTP服务器与你的或其它机器上的程序进行交谈的一种工具,其程...
摘要:本文将要讲述发展历程中的垃圾回收及内存管理相关内容,文末给出发展在各个阶段有关内存管理及垃圾回收内核参考资料值得阅读。引用计数在及以前的版本中,的垃圾回收采用的是引用计数算法。回收周期当缓冲区满时,对缓冲区中的所有可能根进行垃圾回收处理。 showImg(https://segmentfault.com/img/bVbe29F?w=800&h=440); 本文首发于 PHP 垃圾回收与...
阅读 2762·2023-04-25 14:41
阅读 2353·2021-11-23 09:51
阅读 3652·2021-11-17 17:08
阅读 1632·2021-10-18 13:31
阅读 5501·2021-09-22 15:27
阅读 892·2019-08-30 15:54
阅读 2196·2019-08-30 13:16
阅读 716·2019-08-29 17:04