ホームページ >バックエンド開発 >PHPの問題 >PHP のメモリ管理メカニズムとガベージ コレクション メカニズムとは何ですか?それを理解するにはどうすればよいですか?

PHP のメモリ管理メカニズムとガベージ コレクション メカニズムとは何ですか?それを理解するにはどうすればよいですか?

王林
王林転載
2019-08-24 10:14:462525ブラウズ

PHP のメモリ管理メカニズム

var_dump(memory_get_usage());   //获取内存
$a = "laruence";                //定义一个变量
var_dump(memory_get_usage());   //定义变量之后获取内存
unset($a);                      //删除该变量
var_dump(memory_get_usage());   //删除变量后获取内存

出力結果:

int 262144
int 262144
int 262144

上記のことから、PHP のメモリ管理メカニズムは次のとおりであることがわかります。あらかじめ与えられた変数を格納するためのスペースを作成し、スペースが足りない場合は新たにスペースを申請します。

1. 変数名を保存し、シンボル テーブルを持ちます。

2. 変数の値はメモリ空間に保存されます。

3. 変数を削除すると、変数の値が格納されている領域は解放されますが、変数名が格納されているシンボル テーブルは減りません。

var_dump(memory_get_usage());  //获取内存
//定义100个变量
for($i=0;$i<100;$i++)
{
    $a = "test".$i;
    $$a = "hello";
}
//获取定义100个变量之后的内存
var_dump(memory_get_usage());
//定义100个变量并删除
for($i=0;$i<100;$i++)
{
    $a = "test".$i;
    unset($$a);
}
//获取删除之后的内存
var_dump(memory_get_usage());

出力結果:

int 240040
int 257680
int 240856

上記からわかるように、削除後はメモリが小さくなりますが、変数定義前よりはまだ大きいことがわかります。これは、変数の値は削除されますが、変数名は削除されないためです。

php ガベージ コレクション メカニズム

PHP 変数ストレージは zval コンテナに格納されます

1. 型 2. 値 3. is_ref はアドレス参照があるかどうかを表します 4. refcount値を指す変数の数

1。変数に値を代入する場合: is_ref は false、refcount は 1

$a = 1;
xdebug_debug_zval(&#39;a&#39;);echo PHP_EOL;

PHP のメモリ管理メカニズムとガベージ コレクション メカニズムとは何ですか?それを理解するにはどうすればよいですか?

2 です。変数 a の値を変数 b に変換する場合、変数 b はその値をすぐにメモリに保存しませんが、変数 a

$b = $a;
xdebug_debug_zval(&#39;a&#39;);echo PHP_EOL;

PHP のメモリ管理メカニズムとガベージ コレクション メカニズムとは何ですか?それを理解するにはどうすればよいですか?

# に対する操作が行われるまで、まず変数 a の値を指します。 #3 .プログラムは変数 a を再度操作するため、変数 b がメモリの一部に適用され、その値が格納されます。したがって、変数 a の zavl コンテナ内の refcount は 1 減って 1 になります。変数 c は a を指すため、refcount は 1 増えて 2.

$c = &$a;
xdebug_debug_zval(&#39;a&#39;);echo PHP_EOL;
xdebug_debug_zval(&#39;b&#39;);echo PHP_EOL;

PHP のメモリ管理メカニズムとガベージ コレクション メカニズムとは何ですか?それを理解するにはどうすればよいですか? になります。

ガベージ コレクション:

1. バージョン 5.2 以前では、PHP は refcount 値に基づいてガベージかどうかを判断します。 0 では、PHP はガベージとしてリリースします。

このリサイクル メカニズムに欠陥があるため、循環参照を持つ変数はリサイクルできません

#2。ガベージ コレクション メカニズムは 5.3 以降のバージョンで改善されました

zval コンテナ内の refcount が増加していることが判明した場合は、それがガベージではないことを示します

zval コンテナ内の refcount が減少していることが判明した場合 (0 に減少した場合) 、ガベージ コレクションとして直接処理されます

zval コンテナーの refcount が減少していることが判明した場合、減少していません。0 にすると、PHP はその値を疑わしい候補としてバッファーに入れます。ゴミのオブジェ。

バッファーが臨界値に達すると、PHP は各値を走査するメソッドを自動的に呼び出します。ゴミであることが判明した場合は、クリーンアップします。

その他の関連する質問については、次のリンクを参照してください。 PHP 中国語 Web サイト:

PHP 実践ビデオ チュートリアル

以上がPHP のメモリ管理メカニズムとガベージ コレクション メカニズムとは何ですか?それを理解するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcnblogs.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。