1.在5.2版本或之前版本,PHP会根据refcount值来判断是不是垃圾
如果refcount值为0,PHP会当做垃圾释放掉
这种回收机制有缺陷,对于环状引用的变量无法回收
环状引用:
$attr = array("hello");$attr[]= &$attr;xdebug_debug_zval('attr');echo PHP_EOL;输出:
attr:(refcount=2, is_ref=1),array (size=2) 0 => (refcount=1, is_ref=0),string 'hello' (length=5) 1 => (refcount=2, is_ref=1), &array2.在5.3之后版本改进了垃圾回收机制
如果发现一个zval容器中的refcount在增加,说明不是垃圾
如果发现一个zval容器中的refcount在减少,如果减到了0,直接当做垃圾回收
如果发现一个zval容器中的refcount在减少,并没有减到0,PHP会把该值放到缓冲区,当做有可能是垃圾的怀疑对象
当缓冲区达到临界值,PHP会自动调用一个方法取遍历每一个值,如果发现是垃圾就清理
推荐阅读
- php如何生成word并下载
- PHP底层运行机制与原理
- 远程桌面管理工具novnc的搭建和使用
- php反射机制用法详解
- 资讯 | 工信部修改乘用车企新能源汽车积分等管理办法
- 手机内存不足怎么破?
- 安卓微信 8.0.20 正式版更新:支持仅群主/管理员修改群名
- 内存为什么是以字节为单位的?
- PHP实现站内信
- 动态评分会影响商品在淘宝搜索中的排名顺序 淘宝网销量评价管理规则会掉权重吗