memory_get_usage,memory_get_peak_usage

下面三个函数主要是PHP为方便大家做性能调试时使用的,

memory_get_usage()函数返回内存使用量,memory_get_peak_usage()函数返回内存使用峰值,getrusage()返回CUP使用情况。

memory_get_usage ([ bool $real_usage = false ] ) : int

$real_usage如果设置为 TRUE,获取系统分配总的内存尺寸,包括未使用的页。如果未设置或者设置为 FALSE,仅仅报告实际使用的内存量。

var_dump(memory_get_usage());
$a = "laruence";
var_dump(memory_get_usage());
unset($a);
var_dump(memory_get_usage());
int(349016) int(349016) int(349016)

从上面可以看出php的内存管理机制是:预先给出一块空间,用来存储变量,当空间不够时,再申请一块新的空间。

1.存储变量名,存在符号表。

2.变量值存储在内存空间。

3.在删除变量的时候,会将变量值存储的空间释放,而变量名所在的符号表不会减小。

所以当$a足够大时会看到不一样的结果
function convert($size){
    $unit=array('b','kb','mb','gb','tb','pb');
    return @round($size/pow(1024,($i=floor(log($size,1024)))),2).' '.$unit[$i];
}
echo '开始内存:'.memory_get_usage(), '';
$a = str_repeat('wang', 1000);//随着分配值的变大下面其系统分配的内存也会变大
echo '运行后内存(true):'.convert(memory_get_usage(true));
echo '运行后内存:'.convert(memory_get_usage());
echo '运行后内存:'.memory_get_usage();
unset($a);
echo '回到正常内存:'.memory_get_usage();
开始内存:357896运行后内存(true):2 mb运行后内存:353.88 kb运行后内存:362368回到正常内存:358272可以看出unset去除了362368-358272=4096
memory_get_peak_usage()
var_dump(memory_get_usage());//349032
var_dump(memory_get_peak_usage());//349112
$a = str_repeat('wang', 1000);
var_dump(memory_get_usage());//353128
var_dump(memory_get_peak_usage());//353208
unset($a);
var_dump(memory_get_usage());//349032
var_dump(memory_get_peak_usage());//353208
经过unset后memory_get_peak_usage没变因为unset 只会把 "已使用" 变为 "空闲",并不是释放空间,还可以看出来当字符串所需要的内存足够大是,PHP会向系统再拿一些内存过来。

猜你喜欢

转载自blog.csdn.net/qq_38234594/article/details/88365820