关于php递归函数内存溢出的问题

简介: 关于php递归函数内存溢出的问题

简单写一个递归函数:

echo '运行前内存:' . round(memory\_get\_usage() / 1024 / 1024, 2) . 'MB', PHP_EOL;
recursive();
function recursive($i=1000){
    if ($i<=0){
        return false;
    }
    $data = range(1,1000);
    echo '运行中内存:' . round(memory\_get\_usage() / 1024 / 1024, 2) . 'MB', PHP_EOL;
    recursive($i-1);
}

image.png

可看到,内存占用将一直上升,直到运行完毕或者内存溢出强制退出,那么为什么会出现这样的情况呢?

主要是因为php的内存回收机制: php的垃圾回收机制

php只有在该函数执行完毕后才会进行回收,而该函数需要调用新的函数(递归),导致$data一直没有回收,直到执行完毕之后才会进行回收,所以造成了内存溢出.

image.png

解决方案

解决方案也很简单,在使用完$data之后,递归调用之前,进行unset销毁$data即可:


image.png

image.png

目录
相关文章
|
存储 缓存 安全
oss跨域资源共享(CORS Configuration)
oss跨域资源共享(CORS Configuration)
1627 4
|
数据可视化 网络安全 Windows
下载安装MobaXterm并链接服务器的操作方法
【2月更文挑战第13天】本文介绍在Windows电脑中,下载、配置MobaXterm软件,从而连接、操作远程服务器的方法~
1371 2
下载安装MobaXterm并链接服务器的操作方法
|
存储 分布式计算 Kubernetes
JuiceFS-开源分布式文件系统入门(一篇就够了)
讲解JuiceFS的一些概念、架构以及实操的案例
7984 0
JuiceFS-开源分布式文件系统入门(一篇就够了)
|
JavaScript Java 测试技术
基于小程序的在线课堂+springboot+vue.js附带文章和源代码设计说明文档ppt
基于小程序的在线课堂+springboot+vue.js附带文章和源代码设计说明文档ppt
72 0
|
iOS开发
iOS开发:下架App的步骤
首先登陆你的 iTunes Connect
3466 0
|
运维 安全 Unix
带你读《Elastic Stack 实战手册》之9:—— 3.4.1.2.Kibana(本地及docker)(6)
带你读《Elastic Stack 实战手册》之9:—— 3.4.1.2.Kibana(本地及docker)(6)
574 0
|
移动开发 HTML5
html5中audio属性和方法
<audio> 标签属性:src:音乐的URLpreload:预加载autoplay:自动播放loop:循环播放controls:浏览器自带的控制条
323 0
|
算法 测试技术 C++
C++程序设计-第15周 数据结构扩展与GUI开发体验
课程首页地址:http://blog.csdn.net/sxhelijian/article/details/7910565 【目的】 1. 体验用面向对象的方法操作数组和动态链表2. 体验窗口程序的实现第一部分 引言  大学中的学习死守着课本非常的没有劲。我不是说课本和课堂没用,而是说在课内的学习之余要有所拓展和扩充。大学的课程(和课本)成为一个体系,受到各种因素的制约,势必会形成一个框框
2069 0