1
我在我的代碼中有一個foreach
聲明,每個迭代計算大量數據並進入下一次迭代。我運行此代碼,但是當我讀取日誌時,發現存在內存泄漏錯誤。爲什麼我的代碼中沒有激活垃圾回收?
PHP.net說,當發生這種情況時,使用gc_enabled()
是處理此問題的好方法。
我已經添加了這些行到foreach
塊的最後一行:
echo "Check GC enabled : " . gc_enabled();
echo "Number of affected cycles : " . gc_collect_cycles();
這是輸出:
Check GC enabled : 1
Number of affected cycles : 0
爲什麼週期存在,但受影響的週期是0?
謝謝。得到它了。但仍然有錯誤。我想我應該把我的長計算縮小到一些部分! – Netmoon
「沒有收集到任何循環,這可能意味着首先沒有內存泄漏」這並不意味着這一點。在託管環境中,當不再真正使用對象時,會使對象保持活動狀態,從而創建內存泄漏。即使是100萬個GC集合也不能清除這些變量。這就是爲什麼他們是*泄漏*。收集只檢查哪些變量未被使用,並釋放他們先前佔用的內存插槽。 –
@YamMarcovic你是對的,但答案是在問題的背景下。我已經重述了這句話。 – user39596