一个基本的虚拟类:
class foo
{
var $bar = 0;
function foo() {}
function boo() {}
}
echo memory_get_usage();
echo "\n";
$foo = new foo();
echo memory_get_usage();
echo "\n";
unset($foo);
echo memory_get_usage();
echo "\n";
$foo = null;
echo memory_get_usage();
echo "\n";
Outputs:
$ php test.php
353672
353792
353792
353792
现在,我知道 PHP 文档说内存在需要时不会被释放(达到上限)。然而,我将其写为一个小测试,因为我有一个更长的任务,使用一个更大的对象,并且有该对象的许多实例。内存不断增加,最终耗尽并停止执行。即使这些大对象确实占用内存,因为我在完成每个对象(串行)后销毁它们,所以它不应该耗尽内存(除非单个对象耗尽了整个内存空间,但情况并非如此) )。
想法?
您是否有任何循环引用可能会阻止垃圾收集器执行其任务?
我运行了一个创建 1,000,000 个对象的快速测试,并且内存没有被耗尽:
class foo
{
var $bar = 0;
function foo() {}
function boo() {}
}
echo memory_get_usage() . "\n";
$foo = new foo();
unset($foo);
echo memory_get_usage() . "\n";
for ($i = 0; $i < 1000000; $i++)
{
$var = 'foo' . $i; // Use a different variable name each time
$$var = new foo();
unset($$var);
}
echo memory_get_usage() . "\n";
65080 65384 65568
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)