PHP verwendet Referenzzählung und Copy-on-Write, um den Speicher zu verwalten. Copy-on-Write stellt sicher, dass das Kopieren von Werten zwischen Variablen keinen Speicher verschwendet, und die Referenzzählung stellt sicher, dass Speicher für das Betriebssystem freigegeben wird, wenn die Variablen nicht mehr benötigt werden.
Um die PHP-Speicherverwaltung zu verstehen, müssen Sie zunächst ein Konzept verstehen – eine Symboltabelle.
Das Konzept der Symboltabelle:
Eine Variable besteht aus zwei Teilen: Variablenname und Variablenwert. Die Symboltabelle ist ein Array, das Variablennamen den Adressen von Variablenwerten im Speicher zuordnet.
Kopie beim Schreiben:
Wenn der Wert einer Variablen in eine andere Variable kopiert wird, verwendet PHP nicht mehr Speicher für den kopierten Wert. Stattdessen wird eine neue Symboltabelle hinzugefügt, um anzuzeigen, dass die beiden Variablen zum selben Speicherblock gehören. Der folgende Code erstellt also kein neues Array:
$people = array( "Alice","Bob" );
$other = $people; //Das Array wird nicht kopiert
?>
Wenn Sie eine der Kopien ändern, weist PHP den zum Erstellen der Kopie erforderlichen Speicher zu:
$people[ 1 ] = "Tom"; //Der Wert ändert sich, das Array wird kopiert und neuer Speicher wird zugewiesen
Durch die Verzögerung des Zuweisens und Kopierens spart PHP in vielen Situationen Zeit und Speicher. Dies ist Copy-on-Write.
Referenzanzahl:
Jede Position in der Symboltabelle verfügt über einen Referenzzähler und sein Wert stellt die Anzahl der Möglichkeiten dar, diesen Speicherbereich zu erhalten.
Nach der Initialisierung und Zuweisung von Werten an $people und $other zeigt das Array auf die Symboltabelle, und der Wert des Referenzzählers von $people und $other beträgt 2. Mit anderen Worten, es gibt zwei Möglichkeiten Holen Sie sich dieses Stück Erinnerung: $people und $other .
Aber wenn $people[1] geändert wird, erstellt PHP ein neues Array für $people. Zu diesem Zeitpunkt sind die Referenzzählerwerte von $people und $other beide 1. Wenn eine Variable den Gültigkeitsbereich verlässt B. Wenn Funktionsparameter und lokale Variablen das Ende der Funktion erreichen, wird der Wert des Anwendungszählers um 1 verringert. Wenn einer Variablen ein Wert in einem anderen Speicherbereich zugewiesen wird, wird der Referenzzähler des alten Werts um 1 verringert . Wenn der Referenzzähler 0 erreicht, wird sein Speicher freigegeben.
Das ist Referenzzählung.
Referenzzählung ist die bevorzugte Speicherverwaltungsmethode. Behalten Sie Variablenbereiche innerhalb von Funktionen bei, übergeben Sie sie als Wert und lassen Sie die Referenzzählung die Speicherverwaltung übernehmen. Wenn Sie aktiv weitere Informationen einholen oder steuern möchten, um den Wert einer Variablen freizugeben, können Sie die Funktionen isset() und unset() verwenden.
Das Obige hat den PHP-Garbage-Collection-Mechanismus vorgestellt – Copy-on-Write und Referenzzählung, einschließlich seiner Aspekte. Ich hoffe, dass es für Freunde hilfreich sein wird, die sich für PHP-Tutorials interessieren.