美文网首页
php垃圾回收算法-note

php垃圾回收算法-note

作者: robertzhai | 来源:发表于2023-05-23 17:24 被阅读0次

php<5.3

1、在PHP5.3版本之前,使用的垃圾回收机制是单纯的“引用计数”。即:
①每个内存对象都分配一个计数器,当内存对象被变量引用时,计数器+1;
②当变量引用撤掉后(执行unset()后),计数器-1;
③当计数器=0时,表明内存对象没有被使用,该内存对象则进行销毁,垃圾回收完成。

php >=5.3

dfs遍历标记的算法

垃圾收集的过程

  • 1)要求数据类型是数组和对象;
  • 2)没有在缓冲区中存在过;
  • 3)没有被标记过;
  • 4)将其gc_info标记为紫色,且记录其在缓冲区的位置。当缓冲区满了,再收集到新的元素就会触发垃圾回收算法。

回收的过程大致可以分为4步

  • 1)对roots环中每个元素进行深度优先遍历,将每个元素中gc_info为紫色的标记元素为灰色,且引用计数减1。
  • 2)扫描roots环中gc_info为灰色的元素,如果发现其引用计数仍旧大于0,说明这个元素还在其他地方使用,那么将其颜色重新标记会黑色,并将其引用计数加1(在第一步有减1操作)。如果发现其引用计数为0,则将其标记为白色。该过程同样为深度优先遍历。
  • 3)扫描roots环,将gc_info颜色为黑色的元素从roots移除。然后对roots中颜色为白色的元素进行深度优先遍历,将其引用计数加1(在第一步有减1操作),然后将roots链表移动到待释放的列表中(to_free)。
  • 4)释放to_free列表的元素。

ref

相关文章

网友评论

      本文标题:php垃圾回收算法-note

      本文链接:https://www.haomeiwen.com/subject/dqixedtx.html