关于php类的实例化和内存的关系,可以这么说:只要有一个new 关键字就是创建一个对象,创建一个对象就是在内存中分配了一个空间 ,那么OK,看代码。
01.
<?php
02.
class ABC{
03.
public $numBox = array();
04.
public function ddd(){
05.
for($i=1; $i<=600; $i++){
06.
$this->numBox[] = mt_rand(1,1000000);
07.
}
08.
echo 'Now memory_get_usage: '.memory_get_usage().'<br />';
09.
}
10.
11.
}
12.
$instance = new ABC();
13.
for($i =0; $i< 50 ; $i++){
14.
$instance->ddd();
15.
}
16.
?>
这是上面的代码在我的机器上面运行的结果:
Now memory_get_usage: 424312
Now memory_get_usage: 476408
Now memory_get_usage: 524408
Now memory_get_usage: 580608
Now memory_get_usage: 628608
Now memory_get_usage: 676608
Now memory_get_usage: 740992
Now memory_get_usage: 789000
Now memory_get_usage: 837000
Now memory_get_usage: 885000
Now memory_get_usage: 933000
Now memory_get_usage: 981000
Now memory_get_usage: 1029000
Now memory_get_usage: 1109768
Now memory_get_usage: 1157768
Now memory_get_usage: 1205768
Now memory_get_usage: 1253768
Now memory_get_usage: 1301768
Now memory_get_usage: 1349768
Now memory_get_usage: 1397768
Now memory_get_usage: 1445768
Now memory_get_usage: 1493768
01.
<?php
02.
class ABC{
03.
public $numBox = array();
04.
public function ddd(){
05.
for($i=1; $i<=600; $i++){
06.
$this->numBox[] = mt_rand(1,1000000);
07.
}
08.
echo 'Now memory_get_usage: '.memory_get_usage().'<br />';
09.
}
10.
11.
}
12.
13.
for($i =0; $i< 50 ; $i++){
14.
$instance = new ABC();
15.
$instance->ddd();
16.
}
17.
?>
这个是上面的代码运行的结果:
Now memory_get_usage: 424552
Now memory_get_usage: 424536
Now memory_get_usage: 424536
Now memory_get_usage: 424536
Now memory_get_usage: 424536
Now memory_get_usage: 424536
Now memory_get_usage: 424536
Now memory_get_usage: 424536
Now memory_get_usage: 424536
Now memory_get_usage: 424536
Now memory_get_usage: 424536
Now memory_get_usage: 424536
Now memory_get_usage: 424536
Now memory_get_usage: 424536
Now memory_get_usage: 424536
Now memory_get_usage: 424536
Now memory_get_usage: 424536
Now memory_get_usage: 424536
Now memory_get_usage: 424536
Now memory_get_usage: 424536
Now memory_get_usage: 424536
Now memory_get_usage: 424536
Now memory_get_usage: 424536
Now memory_get_usage: 424536
Now memory_get_usage: 424536
OK,其实,只要有一个new 关键字就是创建一个对象,创建一个对象就是在内存中分配了一个空间,每次重新分配内存一定是要占用更多的内存的,所以,我们要对的类的实例化要注意,这样也就是为什么要使用单实例设计模式,因为这样可以节约内存。
看到这个结果我也感到很意外,每次实例化的去执行时,反而占用内存少,而只实例化一次反而使用内存多,不知道是为什么,有待高手解答。
探讨PHP类实例化过程中的内存使用情况,通过代码示例展示实例化次数与内存占用的关系,解释为何多次实例化反而节省内存,并讨论单实例设计模式的应用。
1026

被折叠的 条评论
为什么被折叠?



