《Disney +》 迪士尼、Marvel、彼思、星球大戰…  《泡泡糖忍戰》第7賽季即將展開!並推出與VOCALOID的最新合作!   12月3日是PlayStation日!4K電視抽獎活動進行中!   Ghost of Tsushima: Legends(奇譚模式)9月3日單獨發售 追加對抗賽模式   沒有PS5也能遊玩了!PC版「FINAL FANTASY VII REMAKE INTERGRADE」將於Epic Games Store發售!   亡靈Gespenst也加入!「超級機械人大戰30」免費下載及DLC①的發佈日決定!   《DEATH STRANDING DIRECTOR’S CUT》今日登陸PS5,新內容速報   11月26日黑色星期五!NOOK商店大特價!   在今春即將問世的PS VR 獨佔遊戲《Winds & Leaves》裡動動自己的雙手來植林 

PHP 的變數 何時做記憶體釋放

商業

PHP 變數 assign 很大的值,會直接吃掉不少記憶體,此變數使用後,要釋放掉這些記憶體,可以使用 unset() 或者設為空、null 等等。

雖然手動清空變數的記憶體,不過通常程式都不會立即釋放出來,在 PHP 的情況是怎麼樣呢?

  • 註:此篇測試環境是 Linux + PHP 7.0

PHP 的變數 何時做記憶體釋放

想要知道何時釋放記憶體,可以來做個小實驗,使用 PHP 查看記憶體使用量的函式memory_get_usage() 來試試看。

  • 註:實際從系統外部 ps 查看記憶體使用量的部份,可自行使用 sleep + ps 查看

下述分別使用 unset()、null、''、function 等等做測試,程式碼如下:(程式碼註解那區塊是強制釋放系統記憶體,有興趣的可以自行打開玩玩看~)

 /proc/sys/vm/drop_caches');
system('echo 2 > /proc/sys/vm/drop_caches');
system('echo 3 > /proc/sys/vm/drop_caches');
sleep(3);
echo memory_get_usage(true) . "n";
 */

echo "Function:n";
function test() {
    echo "Init 4:n";
    echo memory_get_usage() . " - beginn";
    $x = str_repeat('x', 80000);
    echo memory_get_usage() . " - function endn";
}
test();
echo memory_get_usage() . " - endnn";


echo "Reasign:n";
$x = str_repeat('x', 80000);
echo memory_get_usage() . " - beginn";
$x = null;
echo memory_get_usage() . " - endn";
echo memory_get_peak_usage() . " - memory peakn";
?>

測試結果

Init 1:
437712 - begin
Unset:
355792 - end

Init 2:
437712 - begin
Null:
355792 - end

Init 3:
437712 - begin
Space:
355792 - end

Function:
Init 4:
355792 - begin
437712 - function end
355792 - end

Reasign:
437712 - begin
355792 - end
437792 - memory peak

看起來記憶體都是立即釋放~

相關網頁

Tsung

隨機商業新聞

Gearbest