ホームページ > バックエンド開発 > PHP7 > php7のガベージコレクションとphp5の違いは何ですか

php7のガベージコレクションとphp5の違いは何ですか

王林
リリース: 2023-02-17 12:50:01
オリジナル
3413 人が閲覧しました

php7のガベージコレクションとphp5の違いは何ですか

php5 と php7 のガベージ コレクション メカニズムはどちらも参照カウントを使用します。

#参照カウントとは何ですか?

PHP は C で書かれているため、C には構造体と呼ばれるものがあります。PHP 変数はこの方法で C に保存されます。

各 PHP 変数は、zval というコンテナーに存在します。zval コンテナーには、変数名と値に加えて、2 バイトの追加情報も含まれています。1 つは「is_ref」と呼ばれるブール値です。 , この変数が参照コレクションに属しているかどうかを示すために使用されます。このバイトを通じて、PHP で通常の変数と参照変数を区別できます。2 番目の追加バイトは 'refcount' で、このコンテナを指す変数の数を示すために使用されます。 番号。

PHP5 での出力:

person:
(refcount=1, is_ref=0),
array (size=2)
  'name' => (refcount=1, is_ref=0),string '看看' (length=6)
  'age' => (refcount=1, is_ref=0),int 19
ログイン後にコピー

PHP7 での出力:

person:
(refcount=2, is_ref=0)
array (size=2)
  'name' => (refcount=1, is_ref=0)string '看看' (length=6)
  'age' => (refcount=0, is_ref=0)int 19
ログイン後にコピー

複雑なデータ型の場合、 PHP5 と PHP7 の参照カウント アルゴリズムは異なります。

循環参照の状況を試してみましょう:

上記のコードに基づいて、コード行を追加します

$person['hello'] = $person['name']
ログイン後にコピー

PHP7 での出力:

person:
(refcount=1, is_ref=0)
array (size=3)
  'name' => (refcount=3, is_ref=0)string '看看' (length=6)
  'age' => (refcount=0, is_ref=0)int 19
  'hello' => (refcount=3, is_ref=0)string '看看' (length=6)
ログイン後にコピー

PHP5 の出力:

person:
(refcount=1, is_ref=0),
array (size=3)
  'name' => (refcount=2, is_ref=0),string '看看' (length=6)
  'age' => (refcount=1, is_ref=0),int 19
  'hello' => (refcount=2, is_ref=0),string '看看' (length=6)
ログイン後にコピー

概要:

PHP5 と PHP7 のガベージ コレクション メカニズムはどちらも参照カウントに属します。複雑なデータ型のアルゴリズム処理に関して: zval は PHP7 に新しい実装を備えています。最も基本的な変更は、*zval で必要なメモリがヒープとは別に割り当てられなくなり、参照カウントが単独で格納されなくなったことです。複雑なデータ型 (文字列、配列、オブジェクトなど) の参照カウントは、それ自体で保存されます。

この実装には次の利点があります:

1. 単純なデータ型では、メモリを個別に割り当てる必要がなく、カウントする必要もありません;

2 . 二重カウントはなくなります。オブジェクトでは、オブジェクト自体に保存されているカウントのみが有効です;

3. カウントは値自体によって保存されるため、zval 間など、非 zval 構造内のデータと共有できます。そしてハッシュ可能なキー。

推奨チュートリアル:

PHP7 チュートリアル

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート