ホームページ >バックエンド開発 >PHPチュートリアル >PHP 組み込みガベージ コレクション
今回は、PHP の組み込みガベージ コレクションについて説明します。以下は実際のケースです。 1. 各変数が定義されると、zval と呼ばれるコンテナーに保存されます。このコンテナーには、数量のタイプと値、refcount (変数の数として理解される) および is_ref (変数の数として理解されます) が含まれます。参照変数) 2 つの追加情報。変数が 1 回参照されると、refcount は +1 され、値は 0 になるまで 1 減らされ、メモリから削除されます。変数の定義 PHP は変数を宣言するときにメモリ内のスペースを事前に占有して割り当てますが、この事前に占有されているスペースを超えると、スペースが増加するため、事前に設定された値が毎回展開されるわけではありません。 . ですが、変数を削除してもすぐに容量が消えるわけではありません
3. 変数の参照だけではメモリ使用量が増加するわけではなく、zval
構造体を指すだけで、refcount+1
4になります。簡単に説明すると、PHP 変数は、symbol_table シンボル テーブルの内部実装に依存しており、シンボル テーブルの基本実装は HashTable であり、これは
PHP 配列の基本実装と一致しています。実際、シンボル テーブルの存在により、global を使用してグローバル変数をマークしたり、compact などの関数を使用して現在のシンボル テーブルから変数を直接取り出すことができます。 質問で述べたように、unset($a) がスペースをすぐに解放するかどうかについて話しましょう。答えはノーです。Unset は、シンボル テーブルからの a という名前の要素の削除をサポートします (スペースを解放するのではなく、このスペースをマークするだけです。 )。 同じ名前の変数が更新されるため、更新すると同じ位置の $key の値が更新される状況について説明します。前の要素はすぐに上書きされます。
新しい変数を宣言するとメモリが増加するという問題について話しましょう。答えは不確かです。これは、HashTable に基づいて実装されたシンボル テーブルの特性によるものです。HashTable は、要素を追加するときに 1 つの要素のメモリに適用されませんが、HashTable の場合は複数の要素のメモリに一度に適用されます。複数の要素に対して新しいメモリを適用するとき。つまり、変数を宣言または代入するときに、その変数がシンボル テーブルにない場合、PHP はその変数をシンボル テーブルに追加します。この時点でシンボル テーブルがいっぱいでない場合は、適用されているが未使用のシンボルが使用されます。 table.memory の場合、シンボル テーブルがいっぱいの場合は、新しいメモリがストレージに適用されます。新しいメモリは、この変数に必要なメモリと同じくらい小さいだけではありません
のケースを読んだ後、この方法を習得したと思います。この記事は、さらにエキサイティングです。php 中国語 Web サイトの他の関連記事にもご注目ください。
推奨読書:
Mysqld_multi デプロイメント スタンドアロンの詳細な説明 AngularJS を使用してフロントエンド インターフェイスのパスワードを取得する
以上がPHP 組み込みガベージ コレクションの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。