时间:2021-07-01 10:21:17 帮助过:48人阅读
php5和php7垃圾回收上的区别
PHP5和PHP7的垃圾回收机制都属于引用计数,但是在复杂数据类型的算法处理上:PHP7中zval有了新的实现方式。
最基础的变化就是 *zval 需要的内存不再是单独从堆上分配,不再自己存储引用计数。复杂数据类型(比如字符串、数组和对象)的引用计数由其自身来存储。
这种实现方式有以下好处:
1、简单数据类型不需要单独分配内存,也不需要计数;
2、不会再有两次计数的情况。在对象中,只有对象自身存储的计数是有效的;
3、由于现在计数由数值自身存储,所以也就可以和非 zval 结构的数据共享,比如 zval 和 hashtable key 之间。
PHP5 与 PHP7 引用计数的对比
php 5.* 变量赋值等操作引用计数如图所示,在倒数第二步,会形成一个循环引用,并且在 unset 操作之后,会产生垃圾。
PHP 7 的计数放到了具体的 value 中,zval 不存在写时复制(写时分离)。
并且 PHP 7 的有一个专门的 zend_reference 用来表示引用。
以上就是php5和php7垃圾回收上的区别是什么?的详细内容,更多请关注Gxl网其它相关文章!