ホームページ >バックエンド開発 >PHPチュートリアル >PHP ガベージ コレクションのメカニズムを理解する_PHP チュートリアル
PHP ガベージ コレクション メカニズムは php5 以降にのみ存在しました。PHP ガベージ コレクション メカニズムについて少し紹介します。これがすべての学生の役に立つことを願っています。
PHP 5.3 より前に使用されていたガベージ コレクション メカニズムは単純な「参照カウント」でした。つまり、メモリ オブジェクトが変数によって参照される場合、その変数の参照が削除されると、そのカウンターは 1 になります。カウンタが -1 の場合、カウンタ = 0 は、メモリ オブジェクトが使用されていないこと、メモリ オブジェクトが破棄され、ガベージ コレクションが完了したことを示します。
「参照カウント」の問題は、2 つ以上のオブジェクトが相互に参照してリングを形成する場合、その時点でメモリ オブジェクトのカウンタが 0 に減らず、このメモリ オブジェクトのグループが存在しなくなることです。便利ですが、リサイクルできないため、メモリ リークが発生します。
php5.3 以降、参照カウントに基づいて、メモリ オブジェクト内の参照リングの存在を検出するための複雑なアルゴリズムが使用されています。メモリリークを避けるため。
このアルゴリズムについては、この短い概要の主な参考資料である次の記事を参照してください:): PHP5 のガベージ コレクション アルゴリズム (ガベージ コレクション) の進化に関する簡単な説明
以下の例を見てください。
例1: gc .php
コードは次のとおりです | コードをコピー |
error_reporting(E_ALL); ?> hy0kl% php -f gc.php |
例 2:
コードをコピーします | |
error_reporting(E_ALL); =「私はテストします。'; $b = & $a; $b = '変更しますか?'; hy0kl% php -f gc.php $a = '変更しますか?'; $b = & $a; unset($a); |
例 4: | |||||||||
コードは次のとおりです コードをコピーします unset($b); echo $b ."n"; ?>
実際、例 3 を理解していれば、これはそれに似ています。 見てください:
$a = Error_reporting (e_all); $ b = & $ a;
PHP のガベージ コレクション メカニズムは、php5 以降にのみ存在しました。PHP のガベージ コレクション メカニズムについて少しご紹介します。これがすべての学生に役立つことを願っています。 php 5.3 より前... |