Jede Computersprache verfügt über einen eigenen Mechanismus zur automatischen Speicherbereinigung, sodass sich Programmierer nicht zu viele Gedanken über die Zuweisung von Programmspeicher machen müssen. Bei der objektorientierten Programmierung (OOP) sind jedoch einige Objekte erforderlich explizit zerstört werden; Verhindern Sie, dass der Programmausführungsspeicher überläuft.
1. PHP Garbage Collector (GC)
Wenn in PHP keine Variablen auf dieses Objekt verweisen, wird das Objekt zu Müll. PHP wird es im Speicher zerstören; dies ist der GC-Müllentsorgungsmechanismus von PHP, um einen Speicherüberlauf zu verhindern.
Wenn ein PHP-Thread endet, wird der gesamte aktuell belegte Speicherplatz zerstört und alle Objekte im aktuellen Programm werden gleichzeitig zerstört. Der GC-Prozess beginnt im Allgemeinen mit jeder SESSION. Der Zweck von gc besteht darin, die Sitzungsdateien nach ihrem Ablauf automatisch zu zerstören.
2. Er wird ausgeführt, wenn Das Müllobjekt wird recycelt.
unset zerstört die Variable, die auf das Objekt zeigt, nicht das Objekt.
3. Sitzung und GC
Aufgrund des Arbeitsmechanismus von PHP gibt es keinen Daemon-Thread, um die Sitzungsinformationen regelmäßig zu scannen und festzustellen, ob sie ungültig sind Die Werte der Variablen session.gc_probability und session.gc_divisor bestimmen, ob ein GC aktiviert werden soll. Standardmäßig bedeutet session.gc_probability=1, session.gc_divisor =100, dass eine Wahrscheinlichkeit von 1 % besteht, einen GC zu starten. 100 Nur ein GC wird mit einer der 100 Anfragen gestartet.
Die Aufgabe des GC besteht darin, alle Sitzungsinformationen zu scannen, die letzte geänderte Zeit der Sitzung von der aktuellen Zeit zu subtrahieren und sie mit der Sitzung zu vergleichen. Parameter gc_maxlifetime: Wenn die Überlebenszeit gc_maxlifetime (Standard 24 Minuten) überschreitet, wird die Sitzung gelöscht.
Wenn Ihr Webserver jedoch über mehrere Sites verfügt, kann GC bei der Verarbeitung von Sitzungen an mehreren Sites zu unerwarteten Ergebnissen führen. Der Grund dafür ist: Wenn GC funktioniert, unterscheidet es nicht zwischen Sitzungen verschiedener Sites Wie kann man es zu diesem Zeitpunkt lösen?
1. Ändern Sie session.save_path oder verwenden Sie session_save_path(), um die GC-Startrate zu verbessern Die Leistung wird ebenfalls verbessert und wird nicht empfohlen.
3. Bestimmen Sie die Überlebenszeit der aktuellen Sitzung im Code und löschen Sie sie mit session_destroy().