[PHP] php5.3之前-php5.3-php7垃圾回收机制的进化
2021/4/20 12:28:10
本文主要是介绍[PHP] php5.3之前-php5.3-php7垃圾回收机制的进化,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
php5.3之前的版本 , 只有引用计数 , 如果遇到循环引用的情况 , 会出现内存泄露
比如这样的代码:
<?php $arr=array("tao"); $arr[]=$a; unset($arr)
虽然unset了$arr , 但是内存并不能回收 , 因为有引用自身这样的行为
php5.3 之后的版本 , 有引用计数和同步周期回收算法
在引用计数的基础上 , 增加了同步回收 , 把计数减-1 大于0的变量 , 塞入了root buffer这样的根缓冲池 , 满10000后 , 对池里的变量进行回收操作 , 解决了上面的循环引用问题
php7只后的版本 , 优化了引用计数部分
简单类型:bool(true/false), null, long,double ,值直接存储在zval中 , 没有引用计数
内部增加了一个引用类型 , 变量为对象类型 , 资源类型 , 引用类型时 , 会使用引用计数
字符串类型 , 区分临时字符串 , 内部字符串 , 已知字符串 , 内部字串和已知字串,都会存在于php运行的整个周期,不涉及垃圾回收问题 , 没有引用计数 , 临时字符串有引用计数
数组分为不可变数组和可变数组 ; 不可变数组引用计数初始为2 , 往后会+1 ; 可变数组初始为1 , 往后会+1
不可变数组:
元素是不可变元素的就是不可变数组 , 比如string, integer, float等
$arr=['tao','shihan']
可变数组:
1. 动态生成数组
2. 对不可变数组做任何改变(增减元素,改变元素值)
$arr=range(1,2)
$a = ['y', 'x']; $a[0]='tao' //改变元素
这篇关于[PHP] php5.3之前-php5.3-php7垃圾回收机制的进化的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23怎么实现安卓+php 热更新方案?-icode9专业技术文章分享
- 2024-11-22PHP 中怎么实现判断多个值是否为空、null 或者为 false?-icode9专业技术文章分享
- 2024-11-11开源 PHP 商城项目 CRMEB 二次开发和部署教程
- 2024-11-09怎么使用php在kaufland平台刊登商品?-icode9专业技术文章分享
- 2024-11-05PHP的抽象类和接口是什么,有什么区别-icode9专业技术文章分享
- 2024-11-01开源 PHP 商城项目 CRMEB 安装和使用教程
- 2024-11-01用php和mysql写无限分类,有哪几种方法-icode9专业技术文章分享
- 2024-10-31php数据分表导出时部分数据无法导出什么原因-icode9专业技术文章分享
- 2024-10-30有经验的 PHP 开发者学习一门新的编程语言,有哪些推荐的有前景的语言-icode9专业技术文章分享
- 2024-10-21php 检测图片是否篡改过-icode9专业技术文章分享