摘要:向系統進行的內存申請,并不是有需要時向系統即時申請,而是由的最底層層先向系統申請一大塊的內存,通過對上面三種列表的填充,建立一個類似于內存池的管理機制。在程序運行需要使用內存的時候,會在內存池中分配相應的內存供使用。
一、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/...
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/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 垃圾回收與...
閱讀 2788·2023-04-25 14:41
閱讀 2383·2021-11-23 09:51
閱讀 3678·2021-11-17 17:08
閱讀 1674·2021-10-18 13:31
閱讀 5544·2021-09-22 15:27
閱讀 917·2019-08-30 15:54
閱讀 2226·2019-08-30 13:16
閱讀 735·2019-08-29 17:04