Garbage Collector Gc
Garbage Collector (GC)
Una variable en PHP se almacena en un contenedor llamado “zval”. Un contenedor zval contiene, además del tipo de la variable y su valor, dos bits adicionales de información. Al primero se le llama “is_ref” y contiene un valor booleano que indica si la variable es parte o no de un “conjunto de referencias”. Con este bit, el motor de PHP sabe diferenciar entre variables normales y referencias. Puesto que PHP permite referencias definidas por el usuario, tal y como se crean con el operador &, un contenedor zval tiene también un mecanismo contador de referencias para optimizar el uso de memoria. Esta segunda pieza adicional de información, llamada “refcount”, contiene el número de variables (también llamadas símbolos) que apuntan a este contenedor zval. Todos los símbolos se almacenan en una tabla de símbolos, de las cuales hay una por cada ámbito. Hay un ámbito para el script principal (es decir, el solicitado por el navegador), además de uno por cada función o método.
$test = "nuevo string";
xdebug_debug_zval('x');
// muestra x: (refcount=1, is_ref=0), string 'hola'
(interned, is_ref=0)string 'nuevo string' (length=12)
Se muestra interned cuando solamente existe una instancia en la memoria
https://stackoverflow.com/questions/56833897/why-increasing-refcount-of-zval-not-working
https://stackoverflow.com/questions/34764119/confusion-about-php-7-refcount?rq=3