手机
当前位置:查字典教程网 >编程开发 >php教程 >php5.2.0内存管理改进
php5.2.0内存管理改进
摘要:php5.2.0的内存管理做了较大的改进,某些情况下内存不能释放的问题不存在了。测试php脚本(mem.php),我用echoN>>和sle...

php5.2.0的内存管理做了较大的改进,某些情况下内存不能释放的问题不存在了。

测试php脚本(mem.php),我用echoN>>和sleep来控制脚本在某个阶段暂停以便检测状态。

复制代码 代码如下:

<?php

echo'1>>';

sleep(5);

$o=array();

for($i=0;$i<=100000;$i++){

$o[]='aaaaaaaaaaaaaaaaaaaaa';

}

echo'2>>';

sleep(5);

unset($o);

echo'3>>';

while(true){

echo'..';

sleep(10);

}

?>

监测内存使用情况的bashscript(注意:里面的”mem”是取自上面的php脚本名):

whiletrue;doclear;psau|grep-v"(vi|grep)"|grep"(mem|RSS)";sleep2;done;

以下是$/usr/local/bin/phpmem.php这个进程在三种状态(数组创建前,数组创建后,数组销毁后)下,用5.1.6和5.2.0的PHP(我使用了一样的configure参数)测试的RSS(内存使用值,单位KB)结果。

php5.1.6:

3164

18076

17572

PHP5.2.0:

4088

14400

4424

大家可以看到5.1.6这个版本,unset数组之后,内存并没有从进程里释放出来,虽然它是可以继续被这个php进程再利用,但是却无法被系统的其他进程所使用。而5.2.0则真正释放出了内存。

大家可能还注意到,在最开始,5.2.0的内存使用比5.1.6多了几个kb,这是由于5.2.0增加了一些新的东西,这个是很正常的。

另外php5.2.0的内存分配也进行了大的改进,官方的说法是对memory_limit的检测由每次呼叫emalloc()的时候进行改为直接检测从系统请求的内存数据块(blocks)。需要更进一步了解的朋友可以自己去研究代码。而由于内存分配的实现的更改,内存控制可以更精确地被控制在memory_limit之下,也就是说以前php代码里,如果有超过了memory_limit的内存使用而没有出错的,在php5.2.0里可能会报错。为了平衡这次改进,PHP5.2.0的默认的memory_limit由以前的8MB改为了16MB.搜索源代码可以看到这个修改(find.-name*c-typef|xargscat|grepmemory_limit)。

【php5.2.0内存管理改进】相关文章:

phpBB BBcode处理的漏洞

Mysql的常用命令

php比较相似字符串的方法

Oracle 常见问题解答

php分页函数

php给一组指定关键词添加span标签的方法

php删除指定目录的方法

PHP curl伪造IP地址和header信息代码实例

php格式化电话号码的方法

提升PHP执行速度全攻略

精品推荐
分类导航