自嘲)。....2333,我觉得这是因为它帮助我们解决了php语言层面的内存回收问题,但是这让我在跟java大牛吹牛的时候听到了一些内存泄漏的问题。...(纳尼,我以前没见过tmd)一脸疑惑。我的小菜,如果下面有什么不对的地方请指出,下面很多都是我自己看完+阅读源码后的总结。前言上一篇讲了PHP中的基本数据容器,zend_value,zval并不是所有实际存储数据的都是zend_value,还有zend_value通过指针指向的具体数据存储结构,比如_zend_array,_zend_stringstruct_zend_string{zend_refcounted_hGC;zend_ulongh;/*哈希值*/size_tlen;charval[1];};struct_zend_array{zend_refcounted_hgc;union{struct{ZEND_ENDIAN_LOHI_4(zend_ucharflags,zend_ucharnApplyCount,zend_ucharnIteratorsCount,zend_ucharconsistency)}v;uint32_t标志;}你;uint32_tnTableMask;桶*arData;uint32_tnNumUsed;uint32_tnNumOfElements;uint32_tnTableSize;uint32_tnInternalPointer;zend_longnNextFreeElement;这个变量其实就是zend_refcounted_h引用计数内存回收的两种情况。普通变量在生命周期结束后被回收。这种情况意味着当zend_value中refCount==0时,此时是正常的内存回收。垃圾回收所谓垃圾:是指通过循环引用(自引用,目前只出现在数组和对象类型中)的形式,使refcount永远不会为0。这种情况下,如果不处理,但是内存无法释放,那么内存泄漏代码如下:$a=array(1,2);xdebug_debug_zval("a");$a[]=&$a;xdebug_debug_zval("a");$b=$a;unset($a);xdebug_debug_zval("a");xdebug_debug_zval("b");结果如下a:(refcount=1,is_ref=0)array(size=2)0=>(refcount=0,is_ref=0)i??nt11=>(refcount=0,is_ref=0)i??nt2a:(refcount=2,is_ref=1)array(size=3)0=>(refcount=0,is_ref=0)i??nt11=>(refcount=0,is_ref=0)i??nt22=>(refcount=2、is_ref=1)&array
