ホームページ >バックエンド開発 >PHPチュートリアル >PHPのメモリ解放とガベージコレクションの使用方法を詳しく解説

PHPのメモリ解放とガベージコレクションの使用方法を詳しく解説

php中世界最好的语言
php中世界最好的语言オリジナル
2018-05-17 13:44:541713ブラウズ

今回は、PHP のメモリ解放とガベージ コレクションの使用方法について詳しく説明します。PHP のメモリ解放とガベージ コレクションの 注意事項 は何ですか?実際のケースを見てみましょう。

ReferenceAssignment

$a = 'apple';
$b = &$a;

上記のコードでは、

string変数aに代入し、次にaの参照を変数bに代入しています。明らかに、この時点で指すメモリは次のようになります。

$a -> &#39;apple&#39; <- $b

a と b は同じメモリ領域を指します。 var_dump($a, $b を通じて string(5) "apple" を取得します)。 ) 、これは予想される結果です。

unset Function

文字列「apple」をメモリから解放したいとします。これが私がやったことです:

unset($a);

しかし、2つの変数 $a $b の情報を再度出力すると、次の結果が得られます: 注意: 未定義の変数: a と string(5) "apple" 。奇妙なことに、$a と $b は両方ともメモリ領域を指しているのに、$a が明らかに解放されているのに、なぜ $b は「apple」のままなのでしょうか。

実際には、unset() は変数ポインタを破棄し、そのメモリ領域に格納されている文字列を解放しません。そのため、操作が完了した後、メモリ ポインタは次のようになります:

&#39;apple&#39; <- $b

覚えておくべき重要な点: unset() は次のようになります。変数が指すメモリは解放されず、変数ポインタが破棄されるだけです。同時に、そのメモリ部分の参照カウントを 1 ずつ減らします。参照カウントが 0 の場合、つまり、そのメモリ部分がどの変数からも参照されていない場合、PHP のガベージ コレクションがトリガーされます。

直接リサイクル

それでは、「apple」によって占有されているメモリを実際に解放するにはどうすればよいでしょうか?

上記のメソッドを使用すると、unset($a) してから unset($b) を実行して、メモリ領域内のすべての参照を破棄し、参照カウントが 0 になると、PHP によって自然にリサイクルされます。

もちろん、もっと直接的な方法もあります:

$a = null;

null への直接代入は、$a が指すメモリ領域を空にし、参照カウントを 0 にリセットし、メモリを解放します。

スクリプトの実行が終了します

phpは、スクリプトの実行が終了すると、スクリプトで使用されていたすべてのメモリが解放されます。

この記事の事例を読んだ後は、この方法を習得したと思います。さらに興味深い情報については、php 中国語 Web サイトの他の関連記事に注目してください。

推奨読書:

PHPテンプレートメソッドパターンの使用方法の詳細な説明

thinkPHPフレームワークの自動入力原理と使用法の詳細な説明

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

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