- 使用 引用计数机制
- 将每个 PHP 变量保存在一个叫 zval 变量容器中。
- zval 变量容器 包含 变量的类型、变量值、 is_ref、refcount
- is_ref 用于标识该变量是否为引用集合或变量。
- refcount 表示指向当前变量的个数。
- 默认打开垃圾回收机制, 当发现有存在循环引用的zval时, 就会把其投入到根缓冲区, 当根缓冲区达到配置文件中的指定数量后, 就会进行垃圾回收, 以此解决循环引用导致的内存泄露问题
- 如果引用计数减少到零, 所在变量容器将被清除(free), 不属于垃圾;
- 如果一个zval的引用计数减少后还大于0, 那么它会进入垃圾周期。
- 其次, 在一个垃圾周期中, 通过检查引用计数是否减1, 并且检查哪些变量容器的引用次数是零, 来发现哪部分是垃圾。