2011-01-17 13 views
12

あなたがチェックアウト、マニュアルを読むために私に言う前にphp.net documentation for this functionPHPのgc_enable関数は正確に何をしますか?

警告
この関数は、現在のところ詳細な情報はありません。引数リストのみが使用可能です。

これは役に立ちました!

This pageは、循環参照のガベージコレクションを可能にすると説明しています。いつ、どこで、これが役に立ちますか?誰かが私にその使用例を教えてもらえますか?好ましくは、循環参照を作成して収集する例である。

答えて

14

gc_enableは、gc_disableに電話する場合にのみ必要です。実際にはこれを行う理由はまったくありません。循環参照がガベージコレクションされないようにするためです(サイクリックGCが存在しなかった5.3より前)。

PHPのガベージコレクタは参照カウントで動作します。変数はオブジェクトの「ポインタ」と考えることができます。オブジェクトにポインタがない場合は、何も到達できないため「死んでいる」ため、ガベージコレクションされます。

//one thing points to the Foo object 
$a = new Foo(); 

//now two things do 
$b = $a; 

//now only $b points to it 
$a = null; 

//now nothing points to Foo, so php garbage collects the object 
$b = null; 

このしかし考えてみましょう:

$a = new Foo(); 
$b = new Bar(); 
$b->foo = $a; 
$a->bar = $b; 

$a = $b = null; 

この時点では何もオブジェクト自体を除いて$ bのAまたは$へ保持されません。これは循環参照で、以前のバージョンのPHP(< 5.3)では収集されませんでした。 5.3の周期的コレクタはこれを検出し、これらのオブジェクトをクリーンアップすることができます。

+0

あなたが言っているのは、デフォルトでオンになっているから、残念ながらgc_disableでそれをオフにしない限り、心配する必要はありません。 – Stephen

+0

@Stephen:そうです。正直なところ、この機能を無効にする理由はありません。循環参照が収集できる唯一の方法は、それがオンの場合です。 – ryeguy

+0

GCをオフにする唯一の理由は、スクリプトの処理に先立ってヒューリスティックにトリガされたGCによってスクリプトのパフォーマンスが影響を受けないことを保証することです。しかし、スクリプトがGCを起動してGCがオフになると、それ以上の循環参照は永久に(またはOSカーネルがプロセスを終了させるまで)リークされます。 –

8

はこれを説明するフルchapter on Garbage Collection in the PHP Manualがあります:私は通常はオフサイトをリンクしないようにしようが、それは要約するにはあまりにも多くのだと感じ

+1

優秀...これは実際に私が参照している関数のドキュメントにリンクされているはずです。 – Stephen

+0

@Stephen [zend.enable_gc](http://us3.php.net/manual/en/info.configuration.php#ini.zend.enable-gc)の簡単な説明もあります。[ini section](http://us3.php.net/manual/en/ini.list.php)にあり、デフォルトで有効になっています。 – Gordon

1

gc_disablegc_enableを使用する理由があります。最新のPHPマニュアルで

は、それはあなたがメモリ内に滞在する必要があり多数のオブジェクトを作成するときに、大規模なプロジェクトのために非常に役立ちます

を述べています。だから、GCはそれらをきれいにすることができず、CPU時間を無駄にするだけです。作曲家で

問題: https://github.com/composer/composer/pull/3482#issuecomment-65199153

ソリューションと人々は返信: https://github.com/composer/composer/commit/ac676f47f7bbc619678a29deae097b6b0710b799

上記の2番目のリンクは、グラフィックスと多くのコメントが含まれていることを思い出してください。

+0

これらの返信はちょうど素晴らしいです。 –

関連する問題