输出: string(43) "I am www.jb51.net"
int(90808) //赋值前
int(90976)
int(90808) //是的, 内存正常释放
90808-90808 = 0, 正常了, 也就是说这32个字节是被输出函数给占用了(严格来说, 是被输出的Header占用了)
只增不减的数组Hashtable是PHP的核心结构(了解Hashtable, 可以参看我之前的文章深入理解PHP之数组(遍历顺序)), 数组也是用她来表示的, 而符号表也是一种关联数组, 对于如下代码:
复制代码 代码如下:
var_dump("I am www.jb51.net");
var_dump(memory_get_usage());
$array = array_fill(1, 100, "laruence");
foreach ($array as $key => $value) {
${$value . $key} = NULL;
}
var_dump(memory_get_usage());
foreach ($array as $key=> $value) {
unset(${$value . $key});
}
var_dump(memory_get_usage());
我们定义了100个变量, 然后又按个Unset了他们, 来看看输出:
string(43) "I am www.jb51.net"
int(93560)
int(118848)
int(104448
Wow, 怎么少了这么多内存?这是因为对于Hashtable来说, 定义它的时候, 不可能一次性分配足够多的内存块, 来保存未知个数的元素, 所以PHP会在初始化的时候, 只是分配一小部分内存块给HashTable, 当不够用的时候再RESIZE扩容,
而Hashtable, 只能扩容, 不会减少, 对于上面的例子, 当我们存入100个变量的时候, 符号表不够用了, 做了一次扩容, 而当我们依次unset掉这100个变量以后, 变量占用的内存是释放了(118848 – 104448), 但是符号表并没有缩小, 所以这些少的内存是被符号表本身占去了…
现在, 你是不是对PHP的内存管理有了一个初步的认识了呢?
http://www.bkjia.com/PHPjc/328036.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/328036.htmlTechArticle首先让我们看一个例子 复制代码 代码如下: var_dump(memory_get_usage()); $a = "laruence"; var_dump(memory_get_usage()); unset($a); var_dump(memory_get_usage()); 输出...