回答
PHP沒有垃圾收集器(雖然它的PHP 5.3一樣)。它使用引用計數來管理內存。因此,最常見的內存泄漏來源是循環引用和全局變量。
最簡單的工具是有選擇地調用memory_get_usage並將其縮小到代碼泄漏的位置。您也可以使用xdebug創建代碼的跟蹤。
用執行跟蹤和show_mem_delta運行代碼。
瞭解更多關於在PHP中的垃圾收集5.3+看到php.net/manual/de/features.gc.php
PHP 5.3 +
在PHP5.3+有三個主要的地方執行垃圾收集的能力(也有其他人) :
1.當你告訴它。喜歡使用未設置()或了mysql_free_result()
2.當你離開一個函數清除,留下範圍
3.當腳本結束任何變量...很明顯
非常全面的示例感謝您投入時間進行編輯。 – SamuelDobson
如果PHP本身沒有bug,那麼內存泄漏不可能發生在php腳本中。
內存清理由PHP garbage collector爲您完成。雖然它在大多數情況下可以很好地工作,沒有編程人員的任何努力,但它可以使用一組函數進行控制。 Manual
是的,它可能有內存泄漏Php, 一個基本的方法來看看你是否有O(n)循環內存泄漏是看你的循環時間是否與他的對象數成正比,爲實例100對象比10個對象的循環長約10倍。如果循環對於100個對象來說更長,那麼您可能會有內存泄漏。
你已經引用了擴展開發者的php開發指南。擴展名用C編寫。問題是關於PHP代碼的 – hek2mgl
從PHP 5.3的垃圾收集器可以檢測到循環引用,見http://fr2.php.net/gc_enable
您可以通過使用強制回收週期: http://php.net/manual/fr/function.gc-collect-cycles.php
所有這些功能都具有很大的成本,所以有預防使用,並在大多數情況下,讓PHP爲你做這個,這是他的工作:)
- 1. 靜態變量,Tomcat和內存泄漏
- 2. PHP內存泄漏和叉
- 3. NSDictionary內存泄漏作爲類變量
- 4. 解決PHP內存泄漏
- 5. PHP XML內存泄漏?
- 6. php/symfony/doctrine內存泄漏?
- 7. 內存泄漏[String]常量
- 8. WP8海量內存泄漏
- 9. 內存泄漏
- 10. 內存泄漏:
- 11. 內存泄漏
- 12. 內存泄漏
- 13. 內存泄漏
- 14. 內存泄漏
- 15. 內存泄漏
- 16. 內存泄漏
- 17. 內存泄漏
- 18. 內存泄漏
- 19. 內存泄漏:
- 20. 內存泄漏
- 21. 內存泄漏
- 22. 內存泄漏
- 23. 內存泄漏
- 24. 內存泄漏
- 25. 內存泄漏
- 26. 內存泄漏
- 27. C和OpenCV內存泄漏
- 28. 內存泄漏NSMutableArray和NSDictionary
- 29. 塊和內存泄漏
- 30. TextToSpeech和內存泄漏
我們可以看到一些代碼嗎? –
你甚至可以肯定內存泄漏是問題,而不是簡單的低效代碼? –
在循環中爲每個實例使用相同的變量。如果您將'constructs'引用爲類實例化,請使用singleton或在循環上方實例化一個類。通常問題是代碼。 – machineaddict