成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

php中的內(nèi)存管理

EasonTyler / 3438人閱讀

摘要:向系統(tǒng)進(jìn)行的內(nèi)存申請(qǐng),并不是有需要時(shí)向系統(tǒng)即時(shí)申請(qǐng),而是由的最底層層先向系統(tǒng)申請(qǐng)一大塊的內(nèi)存,通過(guò)對(duì)上面三種列表的填充,建立一個(gè)類似于內(nèi)存池的管理機(jī)制。在程序運(yùn)行需要使用內(nèi)存的時(shí)候,會(huì)在內(nèi)存池中分配相應(yīng)的內(nèi)存供使用。

一、php內(nèi)存管理概述——Zend引擎

由于計(jì)算機(jī)的內(nèi)存由操作系統(tǒng)進(jìn)行管理,所以普通應(yīng)用程序是無(wú)法直接對(duì)內(nèi)存進(jìn)行訪問(wèn)的。

應(yīng)用程序只能向操作系統(tǒng)申請(qǐng)內(nèi)存,通常的應(yīng)用也是這么做的,在需要的時(shí)候通過(guò)類似malloc之類的庫(kù)函數(shù) 向操作系統(tǒng)申請(qǐng)內(nèi)存。

在一些對(duì)性能要求較高的應(yīng)用場(chǎng)景下是需要頻繁的使用和釋放內(nèi)存的, 比如Web服務(wù)器,編程語(yǔ)言等,由于向操作系統(tǒng)申請(qǐng)內(nèi)存空間會(huì)引發(fā)系統(tǒng)調(diào)用, 系統(tǒng)調(diào)用和普通的應(yīng)用層函數(shù)調(diào)用性能差別非常大,因?yàn)橄到y(tǒng)調(diào)用會(huì)將CPU從用戶態(tài)切換到內(nèi)核, 因?yàn)樯婕暗轿锢韮?nèi)存的操作,只有操作系統(tǒng)才能進(jìn)行,而這種切換的成本是非常大的, 如果頻繁的在內(nèi)核態(tài)和用戶態(tài)之間切換會(huì)產(chǎn)生性能問(wèn)題。

鑒于系統(tǒng)調(diào)用的開銷,一些對(duì)性能有要求的應(yīng)用通常會(huì)自己在用戶態(tài)進(jìn)行內(nèi)存管理, 例如第一次申請(qǐng)稍大的內(nèi)存留著備用,而使用完釋放的內(nèi)存并不是馬上歸還給操作系統(tǒng), 可以將內(nèi)存進(jìn)行復(fù)用,這樣可以避免多次的內(nèi)存申請(qǐng)和釋放所帶來(lái)的性能消耗。

PHP不需要顯式的對(duì)內(nèi)存進(jìn)行管理,這些工作都由Zend引擎進(jìn)行管理了。PHP內(nèi)部有一個(gè)內(nèi)存管理體系, 它會(huì)自動(dòng)將不再使用的內(nèi)存垃圾進(jìn)行釋放。

二、php中查看與設(shè)置內(nèi)存的相關(guān)參數(shù)與函數(shù)

配置內(nèi)存大?。?/p>

(1)php.ini中可以更改配置memory_limit = 32M
(2)若環(huán)境中沒(méi)有禁用ini_set()函數(shù),可以通過(guò)此函數(shù)設(shè)置:ini_set("memory_limit", "128M");

查看內(nèi)存情況:

(1)memory_get_usage(),這個(gè)函數(shù)的作用是獲取 目前PHP腳本所用的內(nèi)存大小。
(2)memory_get_peak_usage(),這個(gè)函數(shù)的作用返回 當(dāng)前腳本到目前位置所占用的內(nèi)存峰值,這樣就可能獲取到目前的腳本的內(nèi)存需求情況。

三、ZendMM內(nèi)存分配和銷毀

PHP底層對(duì)內(nèi)存的管理, 圍繞著小塊內(nèi)存列表(free_buckets)、 大塊內(nèi)存列表(large_free_buckets)和 剩余內(nèi)存列表(rest_buckets)三個(gè)列表來(lái)分層進(jìn)行的。

ZendMM向系統(tǒng)進(jìn)行的內(nèi)存申請(qǐng),并不是有需要時(shí)向系統(tǒng)即時(shí)申請(qǐng), 而是由ZendMM的最底層(heap層)先向系統(tǒng)申請(qǐng)一大塊的內(nèi)存,通過(guò)對(duì)上面三種列表的填充, 建立一個(gè)類似于內(nèi)存池的管理機(jī)制。

在程序運(yùn)行需要使用內(nèi)存的時(shí)候,ZendMM會(huì)在內(nèi)存池中分配相應(yīng)的內(nèi)存供使用。 這樣做的好處是避免了PHP向系統(tǒng)頻繁的內(nèi)存申請(qǐng)操作。

ZendMM在內(nèi)存銷毀的處理上采用與內(nèi)存申請(qǐng)相同的策略,當(dāng)程序unset一個(gè)變量或者是其他的釋放行為時(shí), ZendMM并不會(huì)直接立刻將內(nèi)存交回給系統(tǒng),而是只在自身維護(hù)的內(nèi)存池中將其重新標(biāo)識(shí)為可用, 按照內(nèi)存的大小整理到上面所說(shuō)的三種列表(small,large,free)之中,以備下次內(nèi)存申請(qǐng)時(shí)使用。

具體的詳情可參考:http://www.php-internals.com/...

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/31117.html

相關(guān)文章

  • PHP內(nèi)存模型

    摘要:為單進(jìn)程的由代執(zhí)行每一個(gè)請(qǐng)求由從進(jìn)程池中取出進(jìn)程初始化數(shù)據(jù)結(jié)構(gòu)創(chuàng)建進(jìn)程變量共享類似于的內(nèi)容為所有進(jìn)程所共享即單例模式默認(rèn)是采用磁盤文件實(shí)現(xiàn)的管理即變量是一次請(qǐng)求說(shuō)單獨(dú)的享有的不能被所有請(qǐng)求所共享共享由于每次請(qǐng)求代由創(chuàng)建進(jìn)程所以由共享問(wèn)題是使 php為單進(jìn)程的,由apache代執(zhí)行,每一個(gè)請(qǐng)求,由apache從進(jìn)程池中取出進(jìn)程,初始化數(shù)據(jù)結(jié)構(gòu),創(chuàng)建進(jìn)程. 變量共享,類似于session的...

    Maxiye 評(píng)論0 收藏0
  • PHP7源碼分析】PHP內(nèi)存管理

    摘要:分頁(yè)管理先說(shuō)說(shuō)虛擬內(nèi)存的概念。每個(gè)存在的虛擬頁(yè)面都保存在某個(gè)區(qū)域中,不屬于任何一個(gè)區(qū)域的虛擬頁(yè)是不存在的,不能被進(jìn)程使用內(nèi)核為系統(tǒng)中的每個(gè)進(jìn)程維護(hù)一個(gè)單獨(dú)的任務(wù)結(jié)構(gòu),任務(wù)中的一個(gè)字段指向,他描述了虛擬內(nèi)存的當(dāng)前狀態(tài)。 作者: 順風(fēng)車運(yùn)營(yíng)研發(fā)團(tuán)隊(duì) 李樂(lè) 第一章 從操作系統(tǒng)內(nèi)存管理說(shuō)起 程序是代碼和數(shù)據(jù)的集合,進(jìn)程是運(yùn)行著的程序;操作系統(tǒng)需要為進(jìn)程分配內(nèi)存;進(jìn)程運(yùn)行完畢需要釋放內(nèi)存;內(nèi)存管...

    waltr 評(píng)論0 收藏0
  • PHP|什么是CGI, FastCGI, PHP-CGI, PHP-FPM, Spawn-FCGI

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

    el09xccxy 評(píng)論0 收藏0
  • 什么是CGI、FastCGI、PHP-CGI、PHP-FPM

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

    MycLambert 評(píng)論0 收藏0
  • PHP 垃圾回收與內(nèi)存管理指引

    摘要:本文將要講述發(fā)展歷程中的垃圾回收及內(nèi)存管理相關(guān)內(nèi)容,文末給出發(fā)展在各個(gè)階段有關(guān)內(nèi)存管理及垃圾回收內(nèi)核參考資料值得閱讀。引用計(jì)數(shù)在及以前的版本中,的垃圾回收采用的是引用計(jì)數(shù)算法?;厥罩芷诋?dāng)緩沖區(qū)滿時(shí),對(duì)緩沖區(qū)中的所有可能根進(jìn)行垃圾回收處理。 showImg(https://segmentfault.com/img/bVbe29F?w=800&h=440); 本文首發(fā)于 PHP 垃圾回收與...

    Tychio 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<