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