php は、参照カウントとコピーオンライトを使用してメモリを管理します。参照評価により、参照が不要になったときにメモリがオペレーティング システムに返されることが保証され、コピーオンライトにより、変数間で値がコピーされるときにメモリが無駄にならないことが保証されます。
PHP のメモリ管理を理解するには、まずシンボル テーブルの概念を理解する必要があります。変数には、変数名 ($name など) と変数値 (「Fred」など) の 2 つの部分があります。シンボル テーブルは、変数名をその値のメモリ位置にマップする配列です。
ある変数から別の変数に値をコピーするとき、PHP は値をコピーしてメモリを追加するのではなく、シンボル テーブルを更新して「これら 2 つの変数は同じメモリの名前である」ことを示します。したがって、以下のコードは実際には新しい配列を作成しません:
リーリーコピーを変更すると、PHP はメモリを割り当ててコピーを生成します。 リーリー
遅延割り当てとコピーにより、PHP は多くの場合、時間とメモリを節約します。これはコピーオンライトです。シンボル テーブルが指す各値には参照カウントがあり、これはメモリのその部分につながるパスの数を表す数値です。配列の初期値を $people に割り当て、$people を $programmer に割り当てた後、配列を指すシンボル テーブル内のエントリは $people と $programmer になり、参照カウントは 2 になります。言い換えれば、そのメモリにアクセスするには、$people または $programmer を使用する 2 つの方法があります。ただし、$people[1] が変更されると、PHP は $people の新しい配列を作成し、各配列の参照カウントは 1 のみになります。
変数がスコープ外の場合(関数パラメーターまたはローカル変数が関数の最後にある場合)、参照カウントは 1 ずつ減らされます。変数にメモリの別の領域の値が割り当てられると、古い参照カウントは 1 つ減ります。参照カウントが 0 になると、メモリが解放されます。これが参照カウントです。
参照カウントを使用してメモリを管理する好ましい方法は、関数に必要な値を渡すために変数の関数局所性を維持し、参照が不要になったときにメモリを解放する責任を参照カウントに持たせます。さらに情報を取得したい場合、または解放された変数の値を完全に制御したい場合は、関数 isset() および unset() を使用できます。
変数が(空の文字列であっても)設定されているかどうかを確認するには、 isset() を使用します。 リーリー
unset() を使用して変数の値を削除します。
リーリー詳細資料: http://php.net/manual/zh/features.gc.refcounting-basics.php
http://www.bkjia.com/PHPjc/752448.html