PHP5.3中,采⽤了专门的算法(⽐较复杂)。,来处理环状引⽤导致内存泄露的问题。
国内php空间
当⼀个zval可能为垃圾时,回收算法会把这个zval放⼊⼀个内存缓冲区。当缓冲区达到最⼤临界值时(最⼤值可以设置),回收算法会循环遍历所有缓冲区中的zval,判断其是否为垃圾,并进⾏释放处理。或者我们在脚本中使⽤gc_collect_cycles,强制回收缓冲区中的垃圾。
在php5.3的GC中,针对的垃圾做了如下说明:
1:如果⼀个zval的refcount增加,那么此zval还在使⽤,肯定不是垃圾,不会进⼊缓冲区
2:如果⼀个zval的refcount减少到0, 那么zval会被⽴即释放掉,不属于GC要处理的垃圾对象,不会进⼊缓冲区。
3:如果⼀个zval的refcount减少之后⼤于0,那么此zval还不能被释放,此zval可能成为⼀个垃圾,将其放⼊缓冲区。PHP5.3中的GC针对的就是这种zval进⾏的处理。
开启垃圾回收机制后,针对内存泄露的情况,可以节省⼤量的内存空间,但是由于垃圾回收算法运⾏耗费时间,开启垃圾回收算法会增加脚本的执⾏时间。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。