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

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

青灯夜游
青灯夜游オリジナル
2019-10-19 15:49:294017ブラウズ

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

php5 と php7 のガベージ コレクションの違い

PHP5 と PHP7 のガベージ コレクション メカニズムは両方とも参照カウントに属しますが、複雑なデータに属します。タイプ アルゴリズム処理: PHP7 には zval の新しい実装があります。

最も基本的な変更は、*zval で必要なメモリがヒープとは別に割り当てられなくなり、参照カウントが単独で保存されなくなったことです。複雑なデータ型 (文字列、配列、オブジェクトなど) の参照カウントは、それ自体で保存されます。

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

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

2.あと2回は数えられない状況です。オブジェクトでは、オブジェクト自体に保存されているカウントのみが有効です;

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

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

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

各 PHP 変数は、zval というコンテナーに存在します。zval コンテナーには、変数名と値に加えて、2 バイトの追加情報も含まれています:

● 'is_ref' と呼ばれる A は、次のとおりです。この変数が参照セットに属しているかどうかを示すために使用されるブール値。このバイトを通じて、PHP で通常の変数と参照変数を区別できます。

# 2 番目の追加バイトは「refcount」で、このコンテナを指す変数の数を示すために使用されます。

PHP5 と PHP7 の参照カウントの比較

php 5.* 変数代入などの操作の参照カウントは図の通りです。 、ループが形成されます。参考、および設定を解除した後、ゴミが生成されます。

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

PHP 7 のカウントは特定の値に配置され、zval にはコピーオンライト (スプリットオンライト) がありません。

そして、PHP 7 には、参照を表すために使用される特別な zend_reference があります。

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

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

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