page contents

PHP7垃圾回收机制

垃圾回收机制是一种动态存储分配方案。它会自动释放程序不再需要的已分配的内存块.......

attachments-2021-08-XhNP4RjA610ce071789d3.png

垃圾回收机制的含义

垃圾回收机制是一种动态存储分配方案。它会自动释放程序不再需要的已分配的内存块。自动回收内存的过程叫垃圾收集。垃圾回收机制可以让程序员不必过分关心程序内存分配,从而将更多的精力投入到业务逻辑。在现在的流行各种语言当中,垃圾回收机制是新—代语言所共有的特征。

 

垃圾的产生

PHP7中复杂类型,像字符串、数组、对象等的数据结构中,头部都有一个gc,这个gc的作用就是用来对垃圾回收的支持。当变量赋值、传递时,会增加value的引用数,unsetreturn等释放变量时再减掉引用数,减掉后如果发现refcount变为0则直接释放value,这是变量的基本回收过程。

不过有一种问题是这个机制无法解决的,就是循环引用的问题。

什么是循环引用呢﹖简单说就是变量的内部里存的value又引用了变量自身。这种比较经常发生在数组和对象类型的变量上。

这里先讲一下引用,即zend_reference这个类型,这个是PHP7新增的变量类型,当对变量使用"操作时,会创建新的中间结构体zend_reference,这个结构体会真正的指向对应的value 结构。


回收过程

如果当变量的 refcount 减小后大于 0PHP 并不会立即对这个变量进行垃圾鉴定和回收,而是放入一个缓冲区中,等这个缓冲区满了以后(10000 个值)再统一进行处理,加入缓冲区的是变量 zend_value 里的 gc,目前垃圾只会出现在数组和对象两种类型中,数组的情况上面已经介绍了,对象的情况则是成员属性引用对象本身导致的,其它类型不会出现这种变量中的成员引用变量自身的情况,所以垃圾回收只会处理这两种类型的变量。

 

 

以上就是有关PHP7垃圾回收机制的相关内容了,想要了解更多有关php的其它知识也可关注六星社区网站。

  • 发表于 2021-08-06 15:11
  • 阅读 ( 465 )
  • 分类:PHP开发

0 条评论

请先 登录 后评论
小柒
小柒

1478 篇文章

作家榜 »

  1. 轩辕小不懂 2403 文章
  2. 小柒 1478 文章
  3. Pack 1135 文章
  4. Nen 576 文章
  5. 王昭君 209 文章
  6. 文双 71 文章
  7. 小威 64 文章
  8. Cara 36 文章