ホームページ >バックエンド開発 >PHPチュートリアル >phpのガベージコレクションメカニズム
php ガベージ コレクション メカニズム
すべてのコンピューター言語には独自の自動ガベージ コレクション メカニズムがあるため、プログラマーはプログラムのメモリ割り当てについてあまり心配する必要はありません。PHP も例外ではありません。ただし、オブジェクト指向プログラミング (OOP) プログラミングでは、一部のオブジェクトで必要なメモリが必要になります。明示的に破棄されます。プログラム実行メモリがオーバーフローするのを防ぎます。
1. PHP ガベージ コレクション メカニズム (ガベージ コレクター、略して GC)
PHP では、このオブジェクトを指す変数がない場合、オブジェクトはガベージになります。 PHP はこれをメモリ内で破棄します。これは、メモリのオーバーフローを防ぐための PHP の GC ガベージ処理メカニズムです。
PHP スレッドが終了すると、現在占有されているすべてのメモリ空間が破棄され、現在のプログラム内のすべてのオブジェクトが同時に破棄されます。 GC プロセスは通常、セッションごとに実行を開始します。gc の目的は、セッション ファイルが期限切れになったときに、セッション ファイルを自動的に破棄して削除することです。
__destruct() デストラクターが実行されます。ゴミオブジェクトはリサイクルされます。
unset は、オブジェクトではなく、オブジェクトを指す変数を破棄します。
3. セッションと GC
PHP の動作メカニズムにより、PHP にはセッション情報を定期的にスキャンして、有効なリクエストが発生したときにセッション情報が無効であるかどうかを判断するデーモン スレッドがありません。変数 session.gc_probability および session.gc_divisor の値によって、GC を有効にするかどうかが決まります。デフォルトでは、session.gc_probability=1、session.gc_divisor =100 は、GC を開始する可能性が 1% (つまり 100) であることを意味します。 100 件のリクエストのうち 1 つで開始される GC は 1 つだけです)。
GC の仕事は、すべてのセッション情報をスキャンし、現在の時刻からセッションの最終変更時刻を減算し、それを session.gc_maxlifetime パラメータと比較することです。生存時間が gc_maxlifetime (デフォルトは 24 分) を超えると、セッションは削除されます。
ただし、Web サーバーに複数のサイトがある場合、GC が複数のサイトでセッションを処理すると予期しない結果が生じる可能性があります。その理由は、GC が動作しているときに、異なるサイトのセッションが区別されないためです。では、このときどうやって解決すればいいのでしょうか?
1. session.save_path を変更するか、session_save_path() を使用して各サイトのセッションを専用のディレクトリに保存します。
2. GC の起動速度が向上し、システムのパフォーマンスが向上します。も改善されますので、お勧めできません。
3. コード内の現在のセッションの生存時間を確認し、session_destroy() を使用して削除します。