您好,登錄后才能下訂單哦!
小編給大家分享一下php中內(nèi)存管理的案例分析,希望大家閱讀完這篇文章后大所收獲,下面讓我們一起去探討吧!
一、php內(nèi)存管理概述——Zend引擎
由于計算機的內(nèi)存由操作系統(tǒng)進(jìn)行管理,所以普通應(yīng)用程序是無法直接對內(nèi)存進(jìn)行訪問的。
應(yīng)用程序只能向操作系統(tǒng)申請內(nèi)存,通常的應(yīng)用也是這么做的,在需要的時候通過類似malloc之類的庫函數(shù) 向操作系統(tǒng)申請內(nèi)存。
在一些對性能要求較高的應(yīng)用場景下是需要頻繁的使用和釋放內(nèi)存的, 比如Web服務(wù)器,編程語言等,由于向操作系統(tǒng)申請內(nèi)存空間會引發(fā)系統(tǒng)調(diào)用, 系統(tǒng)調(diào)用和普通的應(yīng)用層函數(shù)調(diào)用性能差別非常大,因為系統(tǒng)調(diào)用會將CPU從用戶態(tài)切換到內(nèi)核, 因為涉及到物理內(nèi)存的操作,只有操作系統(tǒng)才能進(jìn)行,而這種切換的成本是非常大的, 如果頻繁的在內(nèi)核態(tài)和用戶態(tài)之間切換會產(chǎn)生性能問題。
鑒于系統(tǒng)調(diào)用的開銷,一些對性能有要求的應(yīng)用通常會自己在用戶態(tài)進(jìn)行內(nèi)存管理, 例如第一次申請稍大的內(nèi)存留著備用,而使用完釋放的內(nèi)存并不是馬上歸還給操作系統(tǒng), 可以將內(nèi)存進(jìn)行復(fù)用,這樣可以避免多次的內(nèi)存申請和釋放所帶來的性能消耗。
PHP不需要顯式的對內(nèi)存進(jìn)行管理,這些工作都由Zend引擎進(jìn)行管理了。PHP內(nèi)部有一個內(nèi)存管理體系, 它會自動將不再使用的內(nèi)存垃圾進(jìn)行釋放。
二、php中查看與設(shè)置內(nèi)存的相關(guān)參數(shù)與函數(shù)
配置內(nèi)存大小:
(1)php.ini中可以更改配置memory_limit = 32M
(2)若環(huán)境中沒有禁用ini_set()函數(shù),可以通過此函數(shù)設(shè)置:ini_set("memory_limit", "128M");
查看內(nèi)存情況:
(1)memory_get_usage(),這個函數(shù)的作用是獲取 目前PHP腳本所用的內(nèi)存大小。
(2)memory_get_peak_usage(),這個函數(shù)的作用返回 當(dāng)前腳本到目前位置所占用的內(nèi)存峰值,這樣就可能獲取到目前的腳本的內(nèi)存需求情況。
看完了這篇文章,相信你對php中內(nèi)存管理的案例分析有了一定的了解,想了解更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。