ホームページ  >  記事  >  バックエンド開発  >  PHPのガベージコレクションの仕組みを詳しく解説

PHPのガベージコレクションの仕組みを詳しく解説

小云云
小云云オリジナル
2018-03-13 13:02:372015ブラウズ

1) PHP のガベージ コレクション サイクルは、参照カウントがゼロ以外の値に減ったときに生成されます。したがって、まず参照カウントを理解する必要があります。

2) 各 php 変数は、「zval」と呼ばれる変数コンテナーに存在します。 zval 変数コンテナには、変数の型と値に加えて、2 バイトの追加情報が含まれています。 1 つ目は「is_ref」で、この変数が参照セットに属しているかどうかを識別するために使用されるブール値です。

3) 2 番目の追加バイトは「refcount」で、この zval 変数コンテナーを指す変数 (シンボルとも呼ばれます) の数を示すために使用されます。

5) ある変数を別の変数に代入すると、参照の数 (refcount) が増加します。変数コンテナに関連付けられた変数がそのスコープを離れるとき (たとえば、関数の実行が終了するとき)、または変数に対して関数 unset() が呼び出されるとき、「refcount」は 1 ずつ減らされます。

4) テストコード例:

$str = 'Hello World!';xdebug_debug_zval('str');$str1 = $str2 = $str;xdebug_debug_zval('str');unset($str1);xdebug_debug_zval('str');

上記の出力例

str:(refcount=1, is_ref=0),string 'Hello World!' (length=12)str:(refcount=3, is_ref=0),string 'Hello World!' (length=12)str:(refcount=2, is_ref=0),string 'Hello World!' (length=12)

リサイクルサイクル

1) 参照カウントがゼロ以外の値に減少すると、ガベージサイクルが発生します。次に、ガベージ サイクル中に、参照カウントが 1 減らされているかどうかを確認し、どの変数コンテナの参照がゼロであるかを確認して、どの部分がガベージであるかを見つけます。

2) PHP ガベージ コレクション アルゴリズムは、シミュレートされた削除、シミュレートされた回復、および実際の削除であり、各アクションは詳細な検索トラバーサルを使用します。

3) PHP リサイクルメカニズムの構成: zend.enable_gc。ガベージ コレクション メカニズムは、gc_enable() 関数と gc_disable() 関数をそれぞれ呼び出してオンまたはオフにすることもできます。 gc_disable() 関数を呼び出す前に gc_collect_cycles() 関数を呼び出してメモリを解放することをお勧めします。

4) パフォーマンスに影響する領域: 1 つはメモリ領域の節約で、もう 1 つはガベージ コレクション メカニズムがメモリ クリーンアップを実行するときの実行時間の増加です

5) PHP の実行では、ルート バッファがいっぱいになると、または gc_collect_cycles() 関数が呼び出されたときにガベージ コレクションが実行されます。

関連する推奨事項:

PHP ガベージ コレクション メカニズムとは

PHP5 のガベージ コレクション メカニズムの進化の分析

PHP のデストラクター __destruct とガベージ コレクション メカニズムの分析

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

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