すべてのコンピューター言語には独自の自動ガベージ コレクション メカニズムがあるため、プログラマーはプログラムのメモリ割り当てについてあまり心配する必要はありません。PHP も例外ではありません。ただし、オブジェクト指向プログラミング (OOP) プログラミングでは、一部のオブジェクトを必要とします。プログラム実行メモリのオーバーフローを防ぐために明示的に破棄されます。
1. PHP のガベージ コレクション メカニズム (ガベージ コレクター (GC))
PHP では、このオブジェクトを指す変数がない場合、オブジェクトはガベージになります。 PHP はこれをメモリ内で破棄します。これは、メモリのオーバーフローを防ぐための PHP の GC ガベージ処理メカニズムです。
PHP スレッドが終了すると、現在占有されているすべてのメモリ空間が破棄され、現在のプログラム内のすべてのオブジェクトも同時に破棄されます。通常、GC プロセスはセッションごとに実行を開始します。gc の目的は、セッション ファイルが期限切れになった後に自動的に破棄して削除することです。 。
unset は、オブジェクトではなく、オブジェクトを指す変数を破棄します。
3. セッションと GC
PHP の動作メカニズムにより、セッション情報を定期的にスキャンして、有効なリクエストが発生したかどうかを判断するデーモン スレッドがありません。PHP はグローバル変数 session.gc_probability を使用します。および session .gc_divisor の値は、GC を有効にするかどうかを決定します。デフォルトでは、session.gc_probability=1、session.gc_divisor =100 は、GC が開始される可能性が 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() を使用して削除します。