php命令行下执行内存溢出的问题
伊谢尔伦
伊谢尔伦 2017-04-11 09:57:02
[PHP讨论组]

php在作为消费者进行消费的时候,常用方法都是写死循环,有时候会产生内存溢出的问题。这里写了一个测试代码,

代码如下:

<?php
    class Test
    {   
        public $name = "sdf";
        public function __construct()
        {   
    
        }   
    }   
    $i;
    
    ============================================================================
    
    //写法1,这里内存不会溢出
    while(true) {
        $i++;
        var_dump($i);
        $i = new Test();    
    }
    
    //写法2,这里内存不会溢出
    while(true) {
        new Test();
    }
    
    //写法3,这里内存会溢出
    while(true) {
       $i[] = new Test();  
    }
?>

第一、二中写法的截图:

第三种写法的截图:

很好奇,为什么第一、二写法不会产生内存溢出呢?

伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

全部回复(2)
迷茫

这是因为前两个循环中创建的对象在循环完成一次后就没有用了,可以被垃圾回收机制回收内存,因此不会出现溢出。而第三种因为每次循环结束都会设置一下$i这个数组,数组$i的生命周期没有结束,持有对每一个Test对象的引用,造成创建的Test对象无法被垃圾回收机制回收,创建的太多了,内存占用就会越来越大,最终就内存溢出了。

阿神

第三种肯定会溢出,只是时间的问题,随着变量i增大,内存肯定不够,平常遇到大数组都是用完手动unset掉或者尽量分批操作

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号