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

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

    return $data; 
} 

Bộ nhớ được cấp cho $ obj có được giải phóng sau khi trả lại không?Làm thế nào để giải phóng bộ nhớ trong PHP?

Nếu không làm cách nào tôi có thể giải phóng?

+0

Trong PHP có bộ thu gom rác http://stackoverflow.com/questions/1735492/is-there-garbage-collection-in-php – stecb

Trả lời

2

PHP sử dụng trình thu thập garbace. Nó giải phóng tất cả các biến mà không có tham chiếu nào còn lại. Giả sử rằng $ obj-> importAFile() không trả về tham chiếu đến $ obj, bộ nhớ sẽ được giải phóng. Tuy nhiên, không có gì đảm bảo khi bộ nhớ sẽ được giải phóng. Nếu $ obj chứa tham chiếu đến chính nó, trong các phiên bản cũ hơn của PHP thì bộ nhớ cũng sẽ không được giải phóng. Bạn có thể đọc thêm trong PHP documentation

0

Nó quản lý bộ nhớ cho bạn. Bạn có thể gặp sự cố chỉ khi có một số tham chiếu vòng tròn giữa các đối tượng của bạn

2

Bằng cách sử dụng unset() trên biến, bạn đã đánh dấu nó là 'thu gom rác' theo nghĩa đen, vì PHP không thực sự có, bộ nhớ không có sẵn ngay lập tức. Biến không còn chứa dữ liệu, nhưng ngăn xếp vẫn ở kích thước hiện tại ngay cả sau khi gọi unset(). Đặt biến thành NULL sẽ giảm dữ liệu và thu hẹp bộ nhớ ngăn xếp gần như ngay lập tức.

Điều này đã làm việc cho tôi trong nhiều trường hợp cảnh báo hết bộ nhớ bị ném trước khi điều chỉnh, sau đó gọi unset() sau khi vô hiệu biến. Gọi không được đặt sau khi vô hiệu hóa có thể không cần thiết nhưng tôi đã sử dụng nó sau khi vô hiệu hóa.

+1

PHP có bộ thu gom rác. Bạn kích hoạt nó bằng 'gc_enable()' và sau đó là 'gc_collect_cycles()' – ILikeTacos

Các vấn đề liên quan