PHP7的垃圾回收机制是如何实现高效内存管理的?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1758个文字,预计阅读时间需要8分钟。
垃圾回收机制+垃圾回收机制是一种动态存储分配方案。它会自动释放不再需要的已分配内存。自动回收内存的过程被称为垃圾收集。垃圾回收机制可以让程序员不必过分关注内存管理。
垃圾回收机制
垃圾回收机制是一种动态存储分配方案。它会自动释放程序不再需要的已分配的内存块。 自动回收内存的过程叫垃圾收集。垃圾回收机制可以让程序员不必过分关心程序内存分配,从而将更多的精力投入到业务逻辑。 在现在的流行各种语言当中,垃圾回收机制是新一代语言所共有的特征。
垃圾的产生
PHP7 中复杂类型,像字符串、数组、对象等的数据结构中,头部都有一个 gc, 这个 gc 的作用就是用来对垃圾回收的支持。当变量赋值、传递时,会增加 value 的引用数, unset、return 等释放变量时再减掉引用数,减掉后如果发现 refcount 变为 0 则直接释放 value,这是变量的基本回收过程。
不过有一种问题是这个机制无法解决的,就是循环引用的问题。
什么是循环引用呢? 简单说就是变量的内部里存的 value 又引用了变量自身。 这种比较经常发生在数组和对象类型的变量上。
这里先讲一下引用,即 zend_reference 这个类型,这个是 PHP7 新增的变量类型,当对变量使用 “&” 操作时,会创建新的中间结构体 zend_reference,这个结构体会真正的指向对应的 value 结构。
本文共计1758个文字,预计阅读时间需要8分钟。
垃圾回收机制+垃圾回收机制是一种动态存储分配方案。它会自动释放不再需要的已分配内存。自动回收内存的过程被称为垃圾收集。垃圾回收机制可以让程序员不必过分关注内存管理。
垃圾回收机制
垃圾回收机制是一种动态存储分配方案。它会自动释放程序不再需要的已分配的内存块。 自动回收内存的过程叫垃圾收集。垃圾回收机制可以让程序员不必过分关心程序内存分配,从而将更多的精力投入到业务逻辑。 在现在的流行各种语言当中,垃圾回收机制是新一代语言所共有的特征。
垃圾的产生
PHP7 中复杂类型,像字符串、数组、对象等的数据结构中,头部都有一个 gc, 这个 gc 的作用就是用来对垃圾回收的支持。当变量赋值、传递时,会增加 value 的引用数, unset、return 等释放变量时再减掉引用数,减掉后如果发现 refcount 变为 0 则直接释放 value,这是变量的基本回收过程。
不过有一种问题是这个机制无法解决的,就是循环引用的问题。
什么是循环引用呢? 简单说就是变量的内部里存的 value 又引用了变量自身。 这种比较经常发生在数组和对象类型的变量上。
这里先讲一下引用,即 zend_reference 这个类型,这个是 PHP7 新增的变量类型,当对变量使用 “&” 操作时,会创建新的中间结构体 zend_reference,这个结构体会真正的指向对应的 value 结构。

