GC(ガーベッジコレクション)

循環参照を持つゴミの回収
gc_disable()

Garbage Collectionとは
⇒動的に確保したメモリ領域のうち、不要になった領域を自動的に解放する機能

あ、C言語でやりましたね。

メモリ不足の例

$a1 = range(1, 200000); echo '1';
$a2 = range(1, 200000); echo '2';
$a3 = range(1, 200000); echo '3';
$a4 = range(1, 200000); echo '4';
$a5 = range(1, 200000); echo '5';

[vagrant@localhost test]$ php index.php
1234PHP Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 32 bytes) in /home/vagrant/test/index.php on line 7

なるほど。。
memory_limit = 128M

$a1 = range(1, 200000); echo '1';
$a1 = range(1, 200000); echo '2';
$a1 = range(1, 200000); echo '3';
$a1 = range(1, 200000); echo '4';
$a1 = range(1, 200000); echo '5';

[vagrant@localhost test]$ php index.php
12345[vagrant@localhost test]$

これならいける。
⇒phpにgarbage collectionがあるから。

循環参照
 参照関係に循環があると、たまっていきメモリ不足になる
 php5.2まで辿れなくなるよう自分でunsetしなければいけなかった
到達できるオブジェクトのみ残す