ホームページ  >  記事  >  バックエンド開発  >  PHP ガベージ コレクション メカニズムを学び、参照カウンターの概念を理解する

PHP ガベージ コレクション メカニズムを学び、参照カウンターの概念を理解する

WBOY
WBOYオリジナル
2016-06-23 14:37:42842ブラウズ

php 変数は、「zval」という変数コンテナーに存在します。「zval」変数コンテナーには、変数の型と値が含まれており、また、変数が参照であるかどうかを示す 2 バイトの追加情報も含まれています。 「refcount」は、この zval 変数コンテナ内の変数の数を指します。

xdebug がインストールされている場合は、xdebug_debug_zval() を使用して「zval」情報を表示できます。以下の通り:

rreee

Result:

str:

(refcount=1, is_ref=0),

string 'phpddt.com' (length=10)

変数コンテナが入っている場合のみ"refcount" は 0 になると破棄されます。変数を unset() すると、目的の "zval" の refcount が 1 減ります。数日前に発生した参照の設定解除の問題について話しましょう:

<?php	$str = "phpddt.com";	xdebug_debug_zval('str');

結果:

b:

(refcount=1, is_ref=0), string 'aaa' (length=3)

参照カウンタの問題の話が続きますが、配列とオブジェクト準拠では状況が異なります。タイプ:

rreee

結果:

arr:

(refcount=1, is_ref=0),

array

'a' => (refcount=1, is_ref=0),string ' aaa' (length= 3)

'b' => (refcount=1, is_ref=0),string 'bbb' (length=3)

arr:

(refcount=1, is_ref=0),

配列

'a' => (refcount=2, is_ref=0),string 'aaa' (length=3)

'b' => (refcount=1, is_ref=0) ' (length= 3)

'aaa' => (refcount=2, is_ref=0),string 'aaa' (length=3)

元の配列要素と新しく追加された配列要素が関連付けられていることがわかります同じ A zval 変数コンテナと「refcount」 2 を使用します。私は、他の人にインスピレーションを与えるためにここにいます。

PHP リファレンス カウンタの詳細については、マニュアルを参照してください: http://php.net/manual/zh/features.gc.refcounting-basics.php

転載歓迎! 元のアドレス: http://www.phpddt.com/php/gc-refcounting-basics.html、転載する場合はアドレスを明記してください。ありがとうございます。

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