2011-08-25 24 views
9
public function foo($file1, $file2){ 
    $obj = new Obj(); 

    $data = array(); 
    $data[] = $obj->importAFile($file1); 
    $data[] = $obj->importAFile($file2); 

    return $data; 
} 

は$のために割り当てられたメモリが復帰後に解放を取得objをしていますか?PHPでメモリを解放するには?

私はそれをどのように解放できない場合は?

+0

ガベージコレクタはhttp://stackoverflow.com/questions/1735492/is-there-garbage-collection-in-phpある – stecb

答えて

2

PHPはgarbace collectorを使用しています。参照が残っていないすべての変数を解放します。 $ obj-> importAFile()が$ objへの参照を返さないと仮定すると、メモリは解放されます。ただし、メモリを解放するときの保証はありません。 $ objに自身の参照が含まれている場合、古いバージョンのPHPではメモリも解放されません。あなたはそれがあなたのためにメモリを管理PHP documentation

0

で詳細を読むことができます。あなたはそう、PHPは本当に1を持っていないとして、あなたは、文字通り「ガベージコレクション」のためにそれをマークした、変数に)(未設定の使用して、オブジェクト間のいくつかの循環参照がある唯一の問題

2

を持っているかもしれませんメモリはすぐに利用できません。変数にはデータは格納されませんが、スタックはunset()を呼び出した後も現在のサイズのままです。変数をNULLに設定すると、データが破棄され、スタックメモリがほぼ即座に縮小されます。

これは、メモリ枯渇の警告をチューニングする前に投げられたいくつかの機会に私のために働いてい

、その変数を無効化した後でunset()を呼び出します。無効にした後でunsetを呼び出すことは必要ないかもしれませんが、それでも無効化の後で使用しました。 PHPで

+1

PHPは、ガベージコレクタを有しています。あなたは 'gc_enable()'とそれから 'gc_collect_cycles()'を有効にします – ILikeTacos

関連する問題