循環参照を持つゴミの回収
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しなければいけなかった
到達できるオブジェクトのみ残す