美文网首页
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