PHP获取程序占用内存memory_get_usage注意事项

我们知道 file_get_contents 函数是将文件内容读取到内存的,那就以这个为例。

查看文件大小
ll -lh apache-jmeter-4.0.zip
50M

<?php

$file = "apache-jmeter-4.0.zip";

$mem_start = memory_get_usage();

reader($file);

$mem_end = memory_get_usage();
echo '使用内存:'.round(($mem_end - $mem_start)/1024/1024, 2).'MB'.PHP_EOL;

function reader($file){
    file_get_contents($file);
}

?>

使用内存:0MB

函数内部申请的内存是局部作用域的,一旦程序离开这个作用域,PHP就会去回收所有内存(让然依然会遵循引用计数的原则)。

<?php

$file = "apache-jmeter-4.0.zip";

$mem_start = memory_get_usage();

file_get_contents($file);

$mem_end = memory_get_usage();
echo '使用内存:'.round(($mem_end - $mem_start)/1024/1024, 2).'MB'.PHP_EOL;

?>

使用内存:0MB

没有变量接收返回值,也就不需要开辟新的内存,那么调用了file_get_contents难道就不消耗内存吗?
肯定要消耗的,只是在file_get_contents内部会申请内存,函数执行完内部变量自然会被回收了。

<?php

$file = "apache-jmeter-4.0.zip";

$mem_start = memory_get_usage();

$info = file_get_contents($file);

$mem_end = memory_get_usage();
echo '使用内存:'.round(($mem_end - $mem_start)/1024/1024, 2).'MB'.PHP_EOL;

?>

使用内存:49.19MB

所以在使用memory_get_usage的时候还是要注意以上的情况。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值