PHP如何进行内存管理?

燧人氏 发布于 2015/03/10 21:17
阅读 600
收藏 0
PHP

在一个while死循环内,每次循环都会增加一些内存使用量,直到超过PHP限制,程序自动退出。

我在循环阶段,将所有能unset的变量都unset了,最终内存还是不断的增加。


PHP如何进行内存管理?

加载中
1
聽雨人
聽雨人
果断建议楼主装个xhprof,看内存在哪里被占了,例如框架开启了sql分析记录,然后你不停的查数据导致记录越来越大之类的会这样。楼上一顿讲解PHP符号表,引用计数,内存机制的可以放后面再看。
0
hmh
hmh
先搞清楚内存用到那里了
0
eechen
eechen
<?php
$i = 0;
while(1){
    $array[$i] = 'test';
    unset($array[$i]);
    $i++;
}
?>
CPU的一个核心会满载,但内存是恒定的,不会因为超过memory_limit而退出。
0
朱__朱
朱__朱
你需要重新设计算法和数据结构
0
暗夜在火星
暗夜在火星
英文好的话可以看下这篇讲得很透彻的文章:How PHP manages variables  ,另外,有空也可以看下:PHP内核探索:变量的创建

0
saintatgod
saintatgod
unset应该不会释放内存吧
甘薯
甘薯
unset应该会在引用为零的时候释放内存, 但是对应保存变量的符号表所占的内存应该不会释放, 下一次新的变量进来会直接覆盖, 因为php的所有的变量的符号表格式都是zval, 这个zval structure本身是不会释放的.
0
甘薯
甘薯

unset应该会在引用为零的时候释放内存, 但是对应保存变量的符号表所占的内存应该不会释放, 下一次新的变量进来会直接覆盖, 因为php的所有的变量的符号表格式都是zval, 这个zval structure本身是不会释放的.

这里有一篇文章 比较简短可以看一下可以解释你的问题

http://www.cnblogs.com/see7di/p/3194776.html

返回顶部
顶部