この記事では、PHP のガベージ コレクションとメモリ管理メカニズムの具体的な手順と関連する操作スキルを主に紹介します。必要な方は参考にしていただければ幸いです。
メモリ管理メカニズム
<span style='font-family: 微软雅黑, "Microsoft YaHei";'>1 var_dump(memory_get_usage()); //获取内存<br>2 $a = "laruence"; //定义一个变量<br>3 var_dump(memory_get_usage()); //定义变量之后获取内存<br>4 unset($a); //删除该变量<br>5 var_dump(memory_get_usage()); //删除变量后获取内存<br></span>
上記からわかるように、PHP のメモリ管理メカニズムは次のとおりです。 スペースが存在する場合、変数を格納するために事前にスペースを与えます。足りない場合は、新しいスペースを申請してください。
1. 変数名を保存し、シンボルテーブルを持ちます。
2. 変数の値はメモリ空間に保存されます。
3. 変数を削除すると、変数値が格納されている領域は解放されますが、変数名が配置されているシンボルテーブルは減りません。
<span style='font-family: 微软雅黑, "Microsoft YaHei";'>var_dump(memory_get_usage()); //获取内存<br>//定义100个变量for($i=0;$i<100;$i++)<br>{ $a = "test".$i;<br> $$a = "hello";<br>}//获取定义100个变量之后的内存var_dump(memory_get_usage());//定义100个变量并删除for($i=0;$i<100;$i++)<br>{ $a = "test".$i; unset($$a);<br>}//获取删除之后的内存var_dump(memory_get_usage());</span>
このように、削除後はメモリが小さくなりますが、変数定義前よりはまだ大きいのは、変数の値が削除されているにもかかわらず、変数名が削除されているためです。は削除されません。
phpのガベージコレクションメカニズム
PHP変数ストレージはzvalコンテナに保存されます
1. タイプ2. 値3. is_refはアドレス参照があるかどうかを表します 4. refcountはポイントする変数の数です値を
1 に代入する場合: is_ref は false で、refcount は 1 です
<span style='font-family: 微软雅黑, "Microsoft YaHei";'>$a = 1;<br>xdebug_debug_zval('a');echo PHP_EOL;</span>
2. 変数 a の値を変数 b に代入することはできません。値はすぐにメモリに保存されますが、変数 a に何らかの操作が行われるまでは、最初は変数 a の値を指します
3。プログラムは変数 a を再度操作するため、変数 b がメモリの一部に適用されます。そしてそこに値を入れます。したがって、変数 a の zavl コンテナ内の refcount は 1 減って 1 になり、変数 c は a を指しているので、refcount は 1 増えて 2 になります。 バージョン 5.2 以前では、PHP がそれであるかどうかを判断します。 refcount 値が 0 の場合、PHP はそれをガベージとして解放します。循環参照を持つ変数の場合、ガベージ コレクション メカニズムは改善されました。バージョン 5.3zval コンテナ内の refcount が増加していることが判明した場合、それはゴミではないことを意味します
zvalコンテナ内のrefcountが減少していることが判明し、0になった場合はそのままガベージコレクション扱いとなります
zvalコンテナ内のrefcountが減少していることが判明した場合、しかし、0 に減らない場合、PHP はその値をガベージの可能性がある疑わしいオブジェクトとしてバッファーに置きます。
バッファーが臨界値に達すると、PHP は自動的にメソッドを呼び出して各値を調べ、ゴミであることが判明した場合は消去します
以上がPHPのガベージコレクションとメモリ管理の仕組みを詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。