php内存问题

代码如下

$num = M('log')->where("date_format(create_time,'%Y-%m') = '$date'")->count('id');

    for($i = 0; ($i+5000)<=20000;$i += 5000){

        $datas = M('credit_log')->where("date_format(create_time,'%Y-%m') = '$date'")->limit($i,$i+5000)->select();
        echo $this->convert(memory_get_usage(true)).'<br/>';
        unset($datas);
        //sleep(5);
    }
    
    

循环几次之后,内存溢出,为什么会内存溢出?因为unset函数没有释放内存?

阅读 2.1k
3 个回答

limit($i,5000)

即使你已经进行变量销毁了,但是有两个问题,一,你的内存全部释放了吗?二,你确定 5000 * 5000 的数据量没有关系么? limit 的参数,1 是从第几个开始,后面的参数是获取多少条数据。

你好,这就要根据PHP垃圾回收机制说起了
首先PHP的垃圾收回机制是引用计数,然后实现自动清除,当你赋值一个变量的时候,PHP并不一定会去直接申请内存地址,因为PHP会有一个预留的地址空间,当此空间占满之后才回去申请,unset之后依据PHP的垃圾回收机制不会自动立刻实现回收,有的unset之后还会保留内存空间一段时间,因此得知

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题