Heim  >  Artikel  >  Backend-Entwicklung  >  Was ist der PHP-Speicherverwaltungsmechanismus und der Garbage-Collection-Mechanismus?

Was ist der PHP-Speicherverwaltungsmechanismus und der Garbage-Collection-Mechanismus?

王林
王林nach vorne
2019-08-24 10:14:462493Durchsuche

PHP-Speicherverwaltungsmechanismus

var_dump(memory_get_usage());   //获取内存
$a = "laruence";                //定义一个变量
var_dump(memory_get_usage());   //定义变量之后获取内存
unset($a);                      //删除该变量
var_dump(memory_get_usage());   //删除变量后获取内存

Ausgabeergebnis:

int 262144
int 262144
int 262144

Wie aus dem Obigen ersichtlich ist, ist der Speicherverwaltungsmechanismus von PHP: Vorgegeben Erstellen Sie einen Speicherplatz zum Speichern von Variablen. Wenn der Speicherplatz nicht ausreicht, beantragen Sie einen neuen Speicherplatz.

1. Variablennamen speichern und Symboltabellen haben.

2. Variablenwerte werden im Speicherplatz gespeichert.

3. Beim Löschen einer Variablen wird der Speicherplatz, in dem der Variablenwert gespeichert ist, freigegeben, die Symboltabelle, in der sich der Variablenname befindet, wird jedoch nicht verkleinert.

var_dump(memory_get_usage());  //获取内存
//定义100个变量
for($i=0;$i<100;$i++)
{
    $a = "test".$i;
    $$a = "hello";
}
//获取定义100个变量之后的内存
var_dump(memory_get_usage());
//定义100个变量并删除
for($i=0;$i<100;$i++)
{
    $a = "test".$i;
    unset($$a);
}
//获取删除之后的内存
var_dump(memory_get_usage());

Ausgabeergebnis:

int 240040
int 257680
int 240856

Wie oben zu sehen ist, ist der Speicher nach dem Löschen zwar kleiner, aber immer noch größer als vor der Definition der Variablen Dies liegt daran, dass zwar der Wert der Variablen gelöscht wird, der Variablenname jedoch nicht gelöscht wird.

PHP-Garbage-Collection-Mechanismus

PHP-Variablenspeicher wird in einem Zval-Container gespeichert

1. Typ 2. Wert 3. is_ref gibt an, ob eine Adressreferenz vorhanden ist 4. refcount Die Anzahl der Variablen, die auf den Wert verweisen

1. Beim Zuweisen einer Variablen: is_ref ist false und refcount ist 1

Was ist der PHP-Speicherverwaltungsmechanismus und der Garbage-Collection-Mechanismus?

2 Variable a zu Variable b, Variable b speichert den Wert nicht sofort im Speicher, sondern zeigt zunächst auf den Wert der Variablen a, bis eine Operation an Variable a erfolgt

$a = 1;
xdebug_debug_zval(&#39;a&#39;);echo PHP_EOL;

Was ist der PHP-Speicherverwaltungsmechanismus und der Garbage-Collection-Mechanismus?

3. Da das Programm die Variable a erneut bearbeitet, wendet sich die Variable b an einen Speicherbereich und legt den Wert darin ab. Daher verringert sich der Refcount im Zavl-Container der Variablen a um 1 und wird 1. Die Variable c zeigt auf a, sodass der Refcount um 1 erhöht und 2 wird

$b = $a;
xdebug_debug_zval(&#39;a&#39;);echo PHP_EOL;

Was ist der PHP-Speicherverwaltungsmechanismus und der Garbage-Collection-Mechanismus?

Garbage Collection:

1. In Version 5.2 oder früher beurteilt PHP anhand des Refcount-Werts, ob es sich um Garbage handelt.

Wenn der Refcount-Wert 0 ist, PHP gibt es als Müll frei

Dieser Recycling-Mechanismus ist fehlerhaft und Variablen mit Zirkelverweisen können nicht recycelt werden

2 Der Garbage-Collection-Mechanismus wurde in Versionen nach 5.3 verbessert

Wenn festgestellt wird, dass der Refcount in einem Zval-Container zunimmt, was darauf hinweist, dass es sich nicht um Müll handelt

Wenn festgestellt wird, dass der Refcount in einem Zval-Container abnimmt, wird er auf 0 reduziert direkt als Garbage Collection behandelt werden

Wenn festgestellt wird, dass der Refcount in einem ZVAL-Container abnimmt, er nicht auf 0 verringert wurde, legt PHP den Wert als mögliches verdächtiges Garbage-Objekt im Puffer ab .

Wenn der Puffer den kritischen Wert erreicht, ruft PHP automatisch eine Methode auf, um jeden Wert zu durchlaufen. Wenn sich herausstellt, dass es sich um Müll handelt, bereinigen Sie ihn

Weitere verwandte Fragen finden Sie unter Chinesische PHP-Website:

Praktisches PHP-Video-Tutorial

Das obige ist der detaillierte Inhalt vonWas ist der PHP-Speicherverwaltungsmechanismus und der Garbage-Collection-Mechanismus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:cnblogs.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen