php垃圾回收机制

基本理解

PHP的垃圾回收主要依赖两点
1.基本的引用计数
2.垃圾回收周期

引用计数基本知识

引用计数基本知识

垃圾回收周期

垃圾回收周期

首先建立一个基本规则

  • refcount增加的,不管
  • refcount减少等于0的,不管
  • refcount减少不等于0的,可能是垃圾,加入垃圾缓存区(双向链表)

当垃圾回收机制打开时,每当缓存区满,就会执行以下查找算法:

1.从buffer链表的roots开始遍历,对变量值的成员深度优先遍历,把成员的refcount减1,并标记为灰色。
2.重新遍历buffer链表,如果一个变量的refcount为0,那么这个变量确实是垃圾,把它标记为白色,如果不为0,则不是垃圾,需要对值的成员做深度优先遍历,对refcount加1,同时标记为黑色。
3.再次遍历buffer链表,将非白色的结点从roots链表中删除,最终roots链表中全部是真正的垃圾,最后将这些垃圾清除。