ホームページ  >  記事  >  バックエンド開発  >  PHP 組み込みガベージ コレクション

PHP 組み込みガベージ コレクション

php中世界最好的语言
php中世界最好的语言オリジナル
2018-03-24 11:55:121461ブラウズ

今回は、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 デプロイメント スタンドアロンの詳細な説明

mysql サービスのインストールが開始できない理由

AngularJS を使用してフロントエンド インターフェイスのパスワードを取得する

以上がPHP 組み込みガベージ コレクションの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。