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:
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:
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.
Saya membaca artikel dan berharap ia membantu
Kutipan sampah