テスト 1:
class Entity { }
$entities = array();
echo "START: ". number_format(memory_get_usage()) . "\n";
for($i = 0; $i < 100000; ++$i)
{
$entities[] = new Entity();
}
echo "BEFORE UNSET: ". number_format(memory_get_usage()) . "\n";
unset($entities);
echo "AFTER UNSET: ". number_format(memory_get_usage()) . "\n";
出力:
START: 631,664
BEFORE UNSET:44,404,904
AFTER UNSET: 8,954,568
テスト 2:
class Entity { }
$entities = array();
echo "START: ". number_format(memory_get_usage()) . "\n";
for($i = 0; $i < 100000; ++$i)
{
$entity = new Entity();
$entities[] = &$entity;
}
echo "BEFORE UNSET: ". number_format(memory_get_usage()) . "\n";
unset($entities);
echo "AFTER UNSET: ". number_format(memory_get_usage()) . "\n";
出力:
START: 631,664
BEFORE UNSET: 10,480,480
AFTER UNSET: 631,752
メモリ制限に苦労した後、少しいじってみました...
その後、ガベージコレクションが実際にどのように機能するのか疑問に思います:
- テスト1がテスト2より多くのメモリを必要とするのはなぜですか?
- テスト1で配列を設定解除した後、phpがメモリを保持するのはなぜですか?
thxデイブ