使用magic\uuu集的PHP内存泄漏
我最近开始优化我的收集类,我发现一个内存泄漏。代码示例:使用magic\uuu集的PHP内存泄漏,php,oop,Php,Oop,我最近开始优化我的收集类,我发现一个内存泄漏。代码示例: class anObject {} $array = array(); for ($i=0; $i < 5000; $i++) { $obj = new anObject(); for ($j = 0; $j <5; $j++) { $obj->{'test'.$j} = $j; } $array[] = $obj; } echo memory_get_usage();
class anObject {}
$array = array();
for ($i=0; $i < 5000; $i++) {
$obj = new anObject();
for ($j = 0; $j <5; $j++) {
$obj->{'test'.$j} = $j;
}
$array[] = $obj;
}
echo memory_get_usage();
// 3548328
unset($array);
class anObjetWithSetter {
public function __set($key, $value) {
$this->{$key} = $value;
}
}
$array = array();
for($i=0; $i < 5000; $i++) {
$obj = new anObjetWithSetter();
for ($j = 0; $j <5; $j++) {
$obj->{'test'.$j} = $j;
}
$array[] = $obj;
}
echo memory_get_usage();
// 5708440
类对象{}
$array=array();
对于($i=0;$i<5000;$i++){
$obj=新的对象();
对于($j=0;$j{'test'.$j}=$j;
}
$array[]=$obj;
}
回显存储器的使用情况();
// 3548328
未设置($数组);
类anObjetWithSetter{
公共函数集($key,$value){
$this->{$key}=$value;
}
}
$array=array();
对于($i=0;$i<5000;$i++){
$obj=新的anObjetWithSetter();
对于($j=0;$j{'test'.$j}=$j;
}
$array[]=$obj;
}
回显存储器的使用情况();
// 5708440
有人知道这个内存泄漏吗?这不是内存泄漏。如果你用setter注释掉上面的所有内容,那么你只运行第二个循环就得到了相同的内存使用率。将
anObjectWithSetter
重命名为anobjectwithonemoresymboltoreinmemory
)@bassxzero如果我评论setter,我有相同的类!为什么setter会使用更多的内存来获得相同的结果?@Narf我知道这是个笑话,但它不是消耗内存的符号!方法magic _set需要两倍的内存…太大了。我不明白why@YohannTilotti你问我PHP是如何实现的,我回答说我没有写它让我不知道。至少我知道,与不带函数的类相比,带函数的类需要更多的内存。但据我所知,PHP可以对没有主体的类进行一些特殊的优化。