gpt4 book ai didi

PHP 对象创建和内存使用

转载 作者:行者123 更新时间:2023-12-03 19:41:02 25 4
gpt4 key购买 nike

基本的虚拟类:

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";

输出:

$ 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 <-- 创建和销毁 1,000,000 个对象的增幅非常小

关于PHP 对象创建和内存使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/469386/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com