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的时候还是要注意以上的情况。

发布了412 篇原创文章 · 获赞 25 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/raoxiaoya/article/details/103909188