为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
叮当猫咪 2019-03-09 01:26:25
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 个元素。

查看完整回答
反对 回复 2019-03-18
?
泛舟湖上清波郎朗

TA贡献1818条经验 获得超3个赞

你只输出了内存,输出数组大小看看就知道了。循环实例化的时候把数组重置了。

echo 'Now memory_get_usage: '.memory_get_usage().',array length:'.count($this->numBox).'<br />';
查看完整回答
反对 回复 2019-03-18
?
墨色风雨

TA贡献1853条经验 获得超6个赞

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

查看完整回答
反对 回复 2019-03-18
  • 3 回答
  • 0 关注
  • 575 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信