猿问

PHP 循环实例化内存占用问题?


 
class ABC
{
    public $numBox = array();
    
    public function ddd(){
    
    for($i=1; $i<=600; $i++){
        $this->numBox[] = mt_rand(1,1000000);
    }
    echo 'Now memory_get_usage: '.memory_get_usage().'<br />';
}
 
}//End  Class

//方案一
$instance = new ABC();  //实例化一次
for($i =0; $i< 50 ; $i++){
$instance->ddd();
}

/*************************************************/
//方案二
for($i =0; $i< 50 ; $i++){
    $instance = new ABC(); //循环实例化
    $instance->ddd();
}

我用PHP在线运行看了下结果,为什么循环实例化反而更省内存?

叮当猫咪
浏览 576回答 3
3回答

慕娘9325324

你知道方案一内存为什么会变得很大吗?你可以打印这个属性 numBox 来看看,这个数组里边有三万个数据,当然越来越大,第二个每次都会创建一个新对象它的数组numBox里边始终只有 600 个元素。

泛舟湖上清波郎朗

你只输出了内存,输出数组大小看看就知道了。循环实例化的时候把数组重置了。 echo 'Now memory_get_usage: '.memory_get_usage().',array length:'.count($this->numBox).'<br />';

墨色风雨

方案一,只实例化一次,每次调用ddd()方法都会往numBox中写数据,占用内存;方案二,在foreach中实例化对象,会导致对象被覆盖,应该说被销毁了,会调用__destruct()方法,numBox中的数据始终是600个,内存不变;具体的你可以在ABC类中加一个__destruct()方法就清楚了。
随时随地看视频慕课网APP
我要回答