In der Müllsammlung von PHP sind gc_mem_caches und gc_collect_cycles zwei sehr wichtige Funktionen. Die Verwendung von Nutzungsweise kann die Effizienz des Speicherrecyclings erheblich verbessern, das Leckagerisiko des Speichers verringern und die Programmleistung optimieren. In diesem Artikel werden die Funktionen, Verwendungsmethoden und Best Practices für die Implementierung des Speichermanagements in Verbindung mit diesen beiden Funktionen ausführlich vorgestellt.
In PHP ist die Garbage Collection (GC) für die automatische Recycling von Variablen und Objekten verantwortlich, auf die nicht mehr auf Speicherleckage verhindern wird. PHP verfolgt Variablen durch einen Referenzzählmechanismus, aber für kreisförmige Referenzen (zwei oder mehr Objekte beziehen sich aufeinander) kann eine einfache Referenzzählung nicht recycelt werden und ein Müllansammlungsmechanismus ist erforderlich.
gc_collect_cycles () ist eine Funktion, die von PHP bereitgestellt wird, die die Müllsammlung aktiv auslöst. Es scannt und recycelt alle durch kreisförmigen Referenzen erzeugten Müll.
Führen Sie einen vollständigen Müllabfuhrzyklus durch und versuchen Sie, den gesamten zirkulären referenzierten Speicher zu recyceln.
Gibt die Anzahl der recycelten Schleifen zurück.
<?php
// Erstellen Sie ein kreisförmiges Referenzbeispiel
class A {
public $b;
}
class B {
public $a;
}
$a = new A();
$b = new B();
$a->b = $b;
$b->a = $a;
// Aktiv Müllsammlung auslösen
$collected = gc_collect_cycles();
echo "Recycelt $collected Referenzierter Speicher\n";
?>
Mit der Funktion gc_mem_caches () wird der Cache in der Müllsammlung und den Speicher freigesetzt. Diese Caches sind normalerweise temporäre Datenstrukturen, die während der Müllsammlung erzeugt werden.
Reinigen Sie den internen Cache des Müllkollektors und lösten Sie den zusätzlichen Speicher frei.
Recyclingreferenzen werden nicht aktiv recycelt und nur zwischengespeicherte Daten werden veröffentlicht.
<?php
// Aufräumen GC Cache,Freier Speicher
gc_mem_caches();
echo "已Aufräumen垃圾回收Cache\n";
?>
Wenn Sie im PHP -Skript ausgeführt werden, kann das Aufrufen einfach gc_collect_cycles () den zirkulären Referenzspeicher recyceln, aber der Cache für die Müllsammlung existiert immer noch und nimmt zusätzlichen Speicher an. Wenn gc_mem_caches () sofort aufgerufen wird, können diese Caches freigegeben werden, um die Speicherverwendung weiter zu reduzieren.
<?php
// Müllsammlung auslösen
$collected = gc_collect_cycles();
echo "Recycelt $collected Recycelnreferenz\n";
// Aufräumen GC Cache,Zusätzliche Speicher frei machen
gc_mem_caches();
echo "垃圾回收Cache已Aufräumen\n";
?>
Zum Beispiel haben langlebige PHP-Skripte (wie Dämonen, CLI-Skripte und Aufgaben-Warteschlangenarbeiter) einen hohen Speicherverbrauch und sind anfällig für kreisförmige Referenzen. Es wird empfohlen, diese beiden Funktionen regelmäßig und proaktiv anzurufen.
Beispiel:
<?php
while (true) {
// Simulation der Geschäftslogik
do_something();
// 定期进行垃圾回收和CacheAufräumen
$collected = gc_collect_cycles();
gc_mem_caches();
echo "Recycelt $collected Recycelnreferenz,Cache已Aufräumen\n";
// Schlafen,Übermäßigen Gebrauch verhindern CPU
sleep(10);
}
?>
gc_collect_cycles () wird verwendet, um den referenzierten Speicher zu recyceln.
GC_MEM_Caches () wird verwendet, um den internen Cache des Müllsammlers zu reinigen.
In Kombination wird effektiver freier Speicher und reduzieren Speicherleckage und aufblähen.
In langjährigen Skripten hilft es vernünftig, diese beiden Funktionen angemessen aufzurufen.
Das Beherrschen und korrekte Verwendung dieser beiden Funktionen kann die Speicherwiederherstellungseffizienz von PHP -Programmen erheblich verbessern und die Anwendungsleistung und -stabilität sicherstellen.
Wenn Sie mehr über den PHP -Müllsammlungsmechanismus erfahren möchten, können Sie besuchen:
https://gitbox.net/manual/en/function.gc-collect-cycles.php
https://gitbox.net/manual/en/function.gc-mem-caches.php