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在线运行看了下结果,为什么循环实例化反而更省内存?
3 回答
慕娘9325324
TA贡献1783条经验 获得超4个赞
你知道方案一内存为什么会变得很大吗?你可以打印这个属性 numBox 来看看,这个数组里边有三万个数据,当然越来越大,第二个每次都会创建一个新对象它的数组numBox里边始终只有 600 个元素。
泛舟湖上清波郎朗
TA贡献1818条经验 获得超3个赞
你只输出了内存,输出数组大小看看就知道了。循环实例化的时候把数组重置了。
echo 'Now memory_get_usage: '.memory_get_usage().',array length:'.count($this->numBox).'<br />';
墨色风雨
TA贡献1853条经验 获得超6个赞
方案一,只实例化一次,每次调用ddd()方法都会往numBox中写数据,占用内存;
方案二,在foreach中实例化对象,会导致对象被覆盖,应该说被销毁了,会调用__destruct()方法,numBox中的数据始终是600个,内存不变;
具体的你可以在ABC类中加一个__destruct()方法就清楚了。
- 3 回答
- 0 关注
- 575 浏览
添加回答
举报
0/150
提交
取消