2011-08-25 91 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

在PHP有垃圾收集器http://stackoverflow.com/questions/1735492/is-there-garbage-collection-in-php – stecb

回答

2

PHP使用garbace收集器。它釋放了沒有引用剩下的所有變量。假設$ obj-> importAFile()不返回對$ obj的引用,內存將被釋放。但是,不能保證內存何時被釋放。如果$ obj包含對自身的引用,則在舊版本的PHP中,內存也不會被釋放。你可以閱讀更多PHP documentation

0

它爲你管理內存。當有你的對象

2

之間的一些循環引用通過一個變量使用未設置(),你可能只有一個問題,你標記它「垃圾收集」從字面上看,作爲PHP並沒有真正有一個,所以內存不會立即可用。變量不再包含數據,但即使在調用unset()之後,堆棧仍保持當前大小。將變量設置爲NULL會丟棄數據並幾乎立即收縮堆棧內存。

這爲我工作在幾個場合內存耗盡的警告被調諧之前拋出,然後抵消變量調用後未設置()。在取消之後取消設置可能不是必要的,但我在取消之後仍然使用它。

+1

PHP有一個垃圾收集器。你可以用'gc_enable()'和'gc_collect_cycles()'來啓用它 – ILikeTacos