Soalan tentang pengurusan memori PHP
给我你的怀抱
给我你的怀抱 2017-05-16 13:11:22
0
2
414

Saya menulis fail untuk menguji penggunaan memori PHP. Saya mendapati bahawa memori yang diduduki oleh pembolehubah selepas keluaran adalah berbeza antara tatasusunan dan objek. Berikut adalah kod yang dijalankan dalam PHP 7.0 CLI mod.

Susun atur:

<?php
fungsi menukar($size){
    $unit=array('b','kb','mb','gb','tb','pb');
    echo @round($size/pow(1024,($i=floor(log($size,1024)))),2).$unit[$i]."\n";
}
fungsi a(){
    $a = [];
    untuk($i=0;$i<1000000;$i++){
        $a[$i] = $i;
    }
    convert(memory_get_usage(true));
}
convert(memory_get_usage(true));
// 2M
a();
tukar(memory_get_usage(true))
// 2M

Output:

2J 34J 2M

Objek:

<?php
fungsi menukar($size){
    $unit=array('b','kb','mb','gb','tb','pb');
    echo @round($size/pow(1024,($i=floor(log($size,1024)))),2).$unit[$i]."\n";
}
fungsi a(){
    $a = stdClass baharu;
    untuk($i=0;$i<1000000;$i++){
        $a->$i = $i;
    }
    convert(memory_get_usage(true));
}
convert(memory_get_usage(true));
a();
tukar(memory_get_usage(true))

Output:

2J 68M 32J
给我你的怀抱
给我你的怀抱

membalas semua(2)
世界只因有你

Soalan ini sangat rumit. Ini mengenai mekanisme pengumpulan sampah PHP. Saya tidak memahaminya dengan teliti.
Setiap proses PHP akan diperuntukkan penimbal akar Semasa pelaksanaan, setiap rujukan kepada struktur data PHP akan dimasukkan ke dalam penimbal ini Apabila had atas penimbal dicapai (biasanya 10,000), PHP akan dicetuskan untuk membersihkan beberapa sumber yang tidak sah.
Jika anda menukar bilangan gelung kepada 5000 kali, kutipan sampah tidak akan dicetuskan Nilai memori dua kali terakhir anda boleh mencubanya.

过去多啦不再A梦

Saya membaca artikel dan berharap ia membantu

Kutipan sampah

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan