PHP のメモリ使用量をテストするファイルを作成しました。リリース後に変数が占有するメモリが配列とオブジェクトで異なることがわかりました。以下は PHP 7.0 CLI で実行されるコードです。モード。
配列:
<?php
関数変換($size){
$unit=array('b','kb','mb','gb','tb','pb');
echo @round($size/pow(1024,($i=floor(log($size,1024)))),2).$unit[$i]."\n";
}
関数 a(){
$a = [];
for($i=0;$i<1000000;$i++){
$a[$i] = $i;
}
変換(memory_get_usage(true));
}
変換(memory_get_usage(true));
// 2M
a();
変換(memory_get_usage(true))
// 2M
出力:
<プリ><コード>2M 34M 2Mオブジェクト:
<?php
関数変換($size){
$unit=array('b','kb','mb','gb','tb','pb');
echo @round($size/pow(1024,($i=floor(log($size,1024)))),2).$unit[$i]."\n";
}
関数 a(){
$a = 新しい標準クラス;
for($i=0;$i<1000000;$i++){
$a->$i = $i;
}
変換(memory_get_usage(true));
}
変換(memory_get_usage(true));
a();
Convert(memory_get_usage(true))
出力:
<プリ><コード>2M 68M 32M
この質問は PHP のガベージ コレクション メカニズムに関するもので、私が理解していることを共有します。
各 PHP プロセスにはルート バッファが割り当てられ、PHP データ構造へのすべての参照はバッファの上限 (通常は 10,000) に達すると、PHP のガベージ コレクション メカニズムがトリガーされます。いくつかの無効なリソースをクリーンアップします。
ループ数を5000回に変更すると、最後の2回のメモリ値が同じになるはずです。
記事を読みましたので、お役に立てれば幸いです
ガベージコレクション