时间:2021-05-26
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)。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
多数人看到这篇日志,第一印象肯定是以为是要讲如何通过正则表达式来判断。非也,在php5.2.0之后,有专门的函数来做这个判断了。判断是否是合法IPif(filt
一、安装php1)在D盘新建一个名为PHP的文件夹,解压缩php-5.2.0-win32.zip到D:\PHP。2)在D:\PHP文件夹下找到php.ini-d
1.json_decode()json_decode(PHP5>=5.2.0,PECLjson>=1.2.0)json_decode—对JSON格式的字符串进行
使用maven引入jarcom.itextpdfitextpdf5.2.0com.itextpdfitext-asian5.2.0创建exportToPDF工具
Apache装好了,终于可以弄开始弄PHP了,那么我们就开始吧。首先将先前下载好的php-5.2.0-Win32.zip解压缩,目录的话随你喜欢咯,我这里为了方