PHP 5.3には、循環参照を収集できるガベージコレクタがあります。試してみる価値があるかもしれません:
gc_enable();
class A {
public function __construct() {
$this->data = str_repeat("A", 1024000);
}
}
$mem = memory_get_usage();
$a = new A();
$mem2 = memory_get_usage();
$a->a = $a;
$a->a->mydata = $a->data . 'test';
$mem3 = memory_get_usage();
unset($a);
gc_collect_cycles();
$mem4 = memory_get_usage();
printf("MEM 1 at start %0.2f Mb\n", ($mem/1024)/1024);
printf("MEM 2 after first instantiation %0.2f Mb\n", ($mem2/1024)/1024);
printf("MEM 3 after self-ref: %0.2f Mb\n", ($mem3/1024)/1024);
printf("MEM 4 after unset(\$a): %0.2f Mb\n", ($mem4/1024)/1024);
出力:
MEM 1 at start: 0.31 Mb
MEM 2 after first instantiation: 1.29 Mb
MEM 3 after self-ref: 2.26 Mb
MEM 4 after unset($a): 0.31 Mb
+1、素敵なサンプルデータ –