PHP ガベージ コレクション メカニズムはメモリ オーバーフローを防止します

WBOY
リリース: 2016-06-20 13:04:35
オリジナル
1275 人が閲覧しました

PHP のガベージ コレクション メカニズムはメモリ オーバーフローを防止します

PHP 言語には、Java などの他の言語と同様に、ガベージ コレクション メカニズムがあります。プログラムの開発および設計プロセスにおいて、ガベージ コレクションに注意を払うことは、Web サイトの動作効率を向上させ、メモリ オーバーフローを防ぐのに役立ちます。

以下では、PHP ガベージ コレクション メカニズムに関連する問題について詳しく説明します。皆さんのお役に立てれば幸いです。

1. PHP ガベージ コレクション メカニズム (ガベージ コレクター、略して GC) の概要

PHP では、オブジェクトを指す変数が存在しない場合、オブジェクトはガベージになります。

PHP はメモリ内でこれを破棄します。これは、メモリのオーバーフローを防ぐための PHP の GC ガベージ処理メカニズムです。

PHP スレッドが終了すると、現在占有されているすべてのメモリ領域が破棄され、現在のプログラム内のすべてのオブジェクトが同時に破棄されます。

GC プロセスは通常、セッションごとに実行を開始します。.gc の目的は、セッション ファイルの有効期限が切れた後に、セッション ファイルを自動的に破棄して削除することです。

2. __destruct /unset 関数

__destruct() ガベージ オブジェクトがリサイクルされるときにデストラクターが実行されます。

unset は、オブジェクトではなく、オブジェクトを指す変数を破棄します。

3. セッション

と PHP のガベージ コレクション メカニズムのため、PHP にはセッション情報を定期的にスキャンして無効かどうかを判断するデーモン スレッドがありません。有効なリクエスト これが発生すると、PHP はグローバル変数 session.gc_probability および session.gc_divisor の値に基づいて GC を有効にするかどうかを決定します。

デフォルトでは、session.gc_probability=1、session.gc_divisor =100 は、GC が開始される可能性が 1% であることを意味します (つまり、100 リクエストのうち 1 つの gc のみが 100 リクエストを伴います)。リクエスト)。

PHP ガベージ コレクション メカニズムの仕事は、すべてのセッション情報をスキャンし、現在の時刻からセッションの最終変更時刻を減算し、生存時間が gc_maxlifetime を超えているかどうかを session.gc_maxlifetime パラメーターと比較することです。 (デフォルトは 24 分)、セッションを削除します。

ただし、Web サーバーに複数のサイトがある場合、GC が複数のサイトでセッションを処理すると予期しない結果が生じる可能性があります。その理由は、GC が動作しているときに、異なるサイトのセッションが区別されないためです。

では、この時点でそれを解決するにはどうすればよいでしょうか?

1. session.save_path を変更するか、session_save_path() を使用して各サイトのセッションを専用のディレクトリに保存します。

2. GC の起動率を指定します。当然のことながら、PHP ガベージ コレクション メカニズムの起動率が増加すると、それに応じてシステムのパフォーマンスが低下するため、推奨されません。

3. コード内の現在のセッションの生存時間を確認し、session_destroy() を使用して削除します。


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