ホームページ  >  記事  >  バックエンド開発  >  PHP カーネル - メモリ リークと新しいガベージ コレクション メカニズムの図解による紹介

PHP カーネル - メモリ リークと新しいガベージ コレクション メカニズムの図解による紹介

黄舟
黄舟オリジナル
2017-03-09 09:51:581917ブラウズ

ガベージ コレクション メカニズムは、動的なストレージ割り当てスキームです。プログラムで不要になった割り当てられたメモリ ブロックを自動的に解放します。 メモリを自動的に再利用するプロセスは、ガベージ コレクションと呼ばれます。 ガベージ コレクション メカニズムにより、プログラマはプログラムのメモリ割り当てについてあまり心配する必要がなく、ビジネス ロジックにより多くのエネルギーを注ぐことができます。

PHP は、言語層でのメモリの動的管理も実装しています。これについては、前の章で詳しく説明しましたが、メモリの動的管理により、開発者は面倒なメモリ管理から解放されます。これに加えて、PHP は言語層でガベージ コレクション メカニズムも提供するため、プログラマはプログラムのメモリ割り当てについてあまり心配する必要がなくなります。

PHP5.3 バージョンより前は、PHP には参照カウントに基づく単純なガベージ コレクションしかありませんでした 変数の参照カウントが 0 になると、PHP はメモリ内のこの変数を破棄します。いわゆるゴミ。 そして、PHP はライフサイクルの終了後にこのプロセス/スレッドが占有しているコンテンツを解放します。この方法により、PHP は初期段階であまりにも多くのメモリ リークを考慮する必要がないと判断されます。 しかし、PHPの発展に伴い、PHP開発者の数は増加し、その事業範囲も拡大してきました。

より完全なガベージ コレクション メカニズムが PHP5.3 で導入されました。 新しいガベージ コレクション メカニズムは、サイクルを処理できない参照メモリ リークの問題を解決します。次に、テスト データの例を使用して、新しいガベージ コレクション メカニズムについて説明します。



(ヒント: refcount と zval とは何ですか?

各変数は PHP の下部にある zval 構造体に格納されます。同じ値を持つ変数は同じ値を共有します。refcount を使用してください)この値を指す変数の数を保存します

たとえば、$a=$b=1 の場合、それらは値 1 と refount=2 の zval を指します。これは、それを指す変数が 2 つあることを意味します詳細については、PHP カーネルの保存機構 (分離/変更))を参照してください。 以下は実際のデータのテストであり、結論は右下隅にあります:



メモリリークを回避する方法:


1. メモリリークの可能性を減らすために高品質のコードを作成します

2. PHP ライフサイクルのリサイクルに従ってシステムが自動的にメモリをリサイクルします (非常駐プログラム、RINIT、RSHOTDOWN に効果的)3. 手動リサイクル、つまり、サーバー nginx または Apache を再起動します (MINIT、 MSHOTDOWN)

4. php.ini 設定ファイルを増やします: php.inimemory_limit = 128M (推奨されません)

致命的なエラー: 許容メモリ サイズ 134217728 バイトが使い果たされました (38218371 バイトを割り当てようとしました) 128MB = 134217728バイト


以上がPHP カーネル - メモリ リークと新しいガベージ コレクション メカニズムの図解による紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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