91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

PHP如何防止內存溢出

發布時間:2020-06-24 16:54:47 來源:億速云 閱讀:403 作者:元一 欄目:編程語言

本篇文章展示了PHP防止內存溢出的具體操作,代碼簡明扼要容易理解,絕對能讓你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

內存溢出(Out Of Memory,簡稱OOM)是指應用系統中存在無法回收的內存或使用的內存過多,最終使得程序運行要用到的內存大于能提供的最大內存。此時程序就運行不了,系統會提示內存溢出,有時候會自動關閉軟件,重啟電腦或者軟件后釋放掉一部分內存又可以正常運行該軟件,而由系統配置、數據流、用戶代碼等原因而導致的內存溢出錯誤,即使用戶重新執行任務依然無法避免。

PHP進程內存大小是可以設置的,默認在配置文件 memory_limit=128M

也可以在程序中動態設置 ini_set('memory_limit', '1024M');這樣就設置成1G了。但是一般不會這樣設置,畢竟會影響到機器的其他服務。有時候可以排查一下代碼,很多時候內存溢出是因為php變量沒有及時釋放,或者遍歷比較大的數組時出現。

1.排查

memory_get_usage() php有這個系統函數,可以得到當前進程使用了多少內存空間。返回是字節單位round(memory_get_usage()/1024/1024, 2).'MB',轉換為MB.

可以追蹤代碼執行過程中內存的變化。

2.常見內存溢出的案例

遍歷大型數組,修改數組的某些值,導致遍歷過程數組復制一份。

php變量的特點是“寫時復制”,

當涉及$arr數組賦值時,會產生分裂,生成新的HashTable結構體,導致內存占用瞬間變大

3.遍歷賦值其他變量

$arr = range(0, 599999);
echo 'foreach前內存:'.round(memory_get_usage()/1024/1024, 2).'MB', '<br/>';
foreach($arr as $key => $item) {
    $arr[$key] = $item + 1;
    if($item % 100000 == 0) {
        echo 'foreach中內存:'.round(memory_get_usage()/1024/1024, 2).'MB', '<br/>';
    }
}
echo 'foreach后內存:'.round(memory_get_usage()/1024/1024, 2).'MB', '<br/>';

//輸出
/*
foreach前內存:49.9MB
foreach中內存:81.36MB
foreach中內存:84.42MB
foreach中內存:87.47MB
foreach中內存:90.52MB
foreach中內存:93.57MB
foreach中內存:96.62MB
foreach后內存:49.9MB
*/

解決方法,采用引用遍歷

$arr = range(0, 599999);
echo 'foreach前內存:'.round(memory_get_usage()/1024/1024, 2).'MB', '<br/>';

foreach($arr as $key => &$item) {
    $arr[$key] = $item + 1;
    if($item % 100000 == 0) {
        echo 'foreach中內存:'.round(memory_get_usage()/1024/1024, 2).'MB', '<br/>';
    }
}unset($key);unset($item);

遍歷完成后記得unset($key);unset($item);  因為$item是對數組最后一個元素的引用,后面如果修改這個變量,會直接修改到數組。

看完上述內容,你們掌握PHP防止內存溢出的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

杂多县| 巴中市| 寿阳县| 泰顺县| 富川| 绥中县| 新野县| 廉江市| 黔西县| 乐东| 天峨县| 马尔康县| 娄底市| 武穴市| 乌拉特前旗| 格尔木市| 嘉鱼县| 安平县| 漯河市| 台北县| 福安市| 鹤庆县| 托克托县| 玉林市| 巨鹿县| 上饶县| 临沭县| 桃江县| 桐柏县| 商城县| 定远县| 古田县| 上虞市| 定襄县| 贵南县| 水富县| 潢川县| 富裕县| 拜城县| 平武县| 桦川县|