首页 技术 正文
技术 2022年11月14日
0 收藏 791 点赞 3,743 浏览 1358 个字

一、内存缓存机制

var_dump(memory_get_usage(true));
$a="laruence";
var_dump(memory_get_usage(true));
unset($a);
var_dump(memory_get_usage(true));

1.加上true之后,显示的三个相等的数代表php申请的内存大小,无论你是空着还是向里面存数据,都显示php申请的内存,当你存储的数据过大时,php会再申请一块新的内存进行扩充,这样就避免了php经常性的调用内存。

2.所有php内存缓存机制是:php不是每次定义一个数据就申请一次内存,而是预先申请一块内存,当存储数据不够时,再次申请一块内存扩充

3.

//$a=”hello”;
//1.存储的变量名,存在符号表里。
//2.变量值存储在内存空间
//3.在删除变量的时候,会将变量值存储的空间释放,而变量名所在的符号表不会减小

4.例如:

var_dump(memory_get_usage());
for($i=0;$i<100;$i++)
{
$a="test".$i;
$$a="hello";
}
var_dump(memory_get_usage());
for($i=0;$i<100;$i++)
{
$a="test".$i;
unset($$a);
}
var_dump(memory_get_usage());

  

二、垃圾回收机制

1.

//php变量存储是存储在一个zval容器里面的
//zval大体分为四块
//1.类型 2.变量值 3.is_ref 布尔型代表是否有地址引用 4.refcount 指向该值得变量的个数

2.例如

//1.变量赋值的时候:is_ref为false  refcount为1
$a=1;
xdebug_debug_zval('a');
echo PHP_EOL;//2.将变量a的值赋变量b,变量b不会立刻去在内存中存储值,而是先指向变量a的值,一直到变量a有任何操作的时候
$b=$a;
xdebug_debug_zval('a');
echo PHP_EOL;//3.因为程序又操作了变量a,所以变量b会自己申请一块内存将值放进去(b不指向a了,但是c又指向a了)$c=&$a;
xdebug_debug_zval('a');
echo PHP_EOL;xdebug_debug_zval('b');
echo PHP_EOL;

3.

//垃圾回收:
//1.在5.2版本之前,php会根据refcunt值来判断是不是垃圾
//如果refcount值为0,php会当做垃圾释放掉
//这种回收机制有缺陷,对于环装引用的变量无法回收

//环状引用
$attr=array("hello");
$attr[]=&$attr;xdebug_debug_zval("attr");
echo PHP_EOL;

  

//2.在5.3之后版本改进了垃圾回收机制
//如果发现一个zval容器中的refcount在增加,说明不是垃圾
//如果发现zval容器中的refcount在减少,如果减少到0,直接当做垃圾回收
//如果发现zval容器中的refcount在减少,并没有减少到0,php会把该值放到缓冲区,当做有可能是垃圾的怀疑对象。
//当缓冲区达到临界值,php会自动调用一个方法去遍历每一个值,如果发现是垃圾就清理

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,488
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,903
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,736
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,487
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:8,127
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:5,289