国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

php中的內存管理

EasonTyler / 3435人閱讀

摘要:向系統進行的內存申請,并不是有需要時向系統即時申請,而是由的最底層層先向系統申請一大塊的內存,通過對上面三種列表的填充,建立一個類似于內存池的管理機制。在程序運行需要使用內存的時候,會在內存池中分配相應的內存供使用。

一、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

相關文章

  • PHP內存模型

    摘要:為單進程的由代執行每一個請求由從進程池中取出進程初始化數據結構創建進程變量共享類似于的內容為所有進程所共享即單例模式默認是采用磁盤文件實現的管理即變量是一次請求說單獨的享有的不能被所有請求所共享共享由于每次請求代由創建進程所以由共享問題是使 php為單進程的,由apache代執行,每一個請求,由apache從進程池中取出進程,初始化數據結構,創建進程. 變量共享,類似于session的...

    Maxiye 評論0 收藏0
  • PHP7源碼分析】PHP內存管理

    摘要:分頁管理先說說虛擬內存的概念。每個存在的虛擬頁面都保存在某個區域中,不屬于任何一個區域的虛擬頁是不存在的,不能被進程使用內核為系統中的每個進程維護一個單獨的任務結構,任務中的一個字段指向,他描述了虛擬內存的當前狀態。 作者: 順風車運營研發團隊 李樂 第一章 從操作系統內存管理說起 程序是代碼和數據的集合,進程是運行著的程序;操作系統需要為進程分配內存;進程運行完畢需要釋放內存;內存管...

    waltr 評論0 收藏0
  • PHP|什么是CGI, FastCGI, PHP-CGI, PHP-FPM, Spawn-FCGI

    摘要:當客戶端請求到達時,進程管理器選擇并連接到一個解釋器。什么是是一個管理器,是只用于的可以在下載得到其實是源代碼的一個補丁,旨在將進程管理整合進包中。與功能比較都是守護的進程管理器。 什么是CGI CGI全稱是公共網關接口(Common Gateway Interface),HTTP服務器與你的或其它機器上的程序進行交談的一種工具,其程序須運行在網絡服務器上。 CGI可以用任何一種語言編...

    el09xccxy 評論0 收藏0
  • 什么是CGI、FastCGI、PHP-CGI、PHP-FPM

    摘要:的工作原理啟動時載入進程管理器或進程管理器自身初始化,啟動多個解釋器進程可見多個并等待來自的連接。當客戶端請求到達時,進程管理器選擇并連接到一個解釋器。什么是是一個管理器,是只用于的其實是源代碼的一個補丁,旨在將進程管理整合進包中。 什么是CGI CGI全稱是公共網關接口(Common Gateway Interface),HTTP服務器與你的或其它機器上的程序進行交談的一種工具,其程...

    MycLambert 評論0 收藏0
  • PHP 垃圾回收與內存管理指引

    摘要:本文將要講述發展歷程中的垃圾回收及內存管理相關內容,文末給出發展在各個階段有關內存管理及垃圾回收內核參考資料值得閱讀。引用計數在及以前的版本中,的垃圾回收采用的是引用計數算法。回收周期當緩沖區滿時,對緩沖區中的所有可能根進行垃圾回收處理。 showImg(https://segmentfault.com/img/bVbe29F?w=800&h=440); 本文首發于 PHP 垃圾回收與...

    Tychio 評論0 收藏0

發表評論

0條評論

EasonTyler

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<