何時在Python中收集對象垃圾?內存何時發佈並影響集合的性能?可以選擇退出或調整gc算法,如果是這樣的話?什麼時候在Python中收集對象垃圾?
回答
的對象從未明確銷燬的摘錄;然而,當他們無法到達時,他們可能會被垃圾收集。 允許實現推遲垃圾收集或完全忽略垃圾收集 - 只要沒有收集到仍然可以訪問的對象,實施質量如何實現垃圾收集就成了一個問題。
CPython的實現細節:CPython的目前使用與(可選)延遲環狀連接的垃圾,其中,當他們變得不可達收集大多數物體的檢測的引用計數方案,但不能保證,收集含有循環引用垃圾。有關控制循環垃圾收集的信息,請參閱gc模塊的文檔。其他實現的行爲不同,CPython可能會改變。不要依賴對象在無法訪問時立即敲定(例如:始終關閉文件)。
編輯:關於推遲垃圾回收....的gc
模塊可讓您與垃圾回收器交互,如果你想和改變採集頻率等禁用它,但我沒有用它自己。此外,包含__del__
方法are not collected的任何對象的循環。
什麼時候在Python中收集對象垃圾?
有在CPython的源代碼中的很多細節:http://svn.python.org/view/python/trunk/Modules/gcmodule.c?revision=81029&view=markup
在任何時間引用計數下降到零,對象被立即刪除。
293/* Python的循環GC不應該看到的傳入引用次數
294 * 0
:如果事情decref'ed爲0,它應該是295 *當時立即釋放。
當新對象的數量大於現有對象數量的25%時,將觸發完全集合。
87除了各種可配置的閾值,我們只觸發
88充分收集如果比率
89 long_lived_pending/long_lived_total
90高於給定值(硬連線到25%)。
何時釋放內存?
我只能剔除這些信息。
781/*清除所有的自由列表
782 *所有自由列表被最高 代的收集過程中被清除。
783 *在空閒列表中分配的項目可能會保留pymalloc競技場 佔用。
784 *清除空閒列表可能會提前回憶OS。
785 */
據此,Python的可能是保持你的對象空閒列表,即使你把它的引用計數爲零回收。我無法明確地發現什麼時候進行免費調用以將內存回饋給操作系統,但我想象這是在進行收集並且該對象未被保存在空閒列表中時完成的。
集合是否會影響性能?
我聽說過的任何非平凡的垃圾收集器都需要CPU和內存的運行。因此,是的,總是會對性能產生影響。你必須嘗試並瞭解你的垃圾收集器。
需要實時響應的程序我遇到了問題,因爲垃圾收集器不允許我控制它們何時運行或它們的運行時間。一些特殊情況也會導致內存過多使用,例如Python對於保留空閒列表的訣竅。
- 1. 垃圾收集器在收集死對象時會做什麼?
- 2. Python + Numpy:什麼時候手動收集垃圾有用?
- 3. 什麼時候對象引用會被垃圾回收?
- 4. 垃圾收集對象
- 5. Scala對象何時收集垃圾?
- 6. 找出什麼對象垃圾收集器正在發佈:
- 7. 什麼時候在java中使用垃圾回收器?
- 8. .NET垃圾回收器什麼時候會釋放這個對象?
- 9. Android的垃圾收集對象
- 10. 垃圾收集資格對象
- 11. 如何跟蹤垃圾收集對象
- 12. Java垃圾收集和大對象
- 13. 對象沒有垃圾收集
- 14. ActiveX對象和.NET垃圾收集器
- 15. 垃圾收集器如何確定對象是否是垃圾?
- 16. c#中的垃圾回收器什麼時候退出
- 17. 什麼時候使用嵌入式單聲道(libmono-2.0)收集C#對象垃圾回收
- 18. 爲什麼FastBitmap無法收集垃圾?
- 19. 爲什麼這是垃圾收集
- 20. 對象創建和垃圾收集在Python
- 21. 辛格爾頓在Java中對象的集合,垃圾收集
- 22. 什麼時候動作<T>得到垃圾回收?
- 23. Python中的手動垃圾收集
- 24. 垃圾收集java
- 25. Java垃圾收集
- 26. Java垃圾收集
- 27. C#垃圾收集
- 28. GWT垃圾收集
- 29. DoctrineCommonCache垃圾收集?
- 30. 垃圾收集器
不錯,雖然很香。任何想法如何排放或推遲gc? – 2012-02-26 00:45:40
這是一個不同的問題馬特阿爾科克和答案是可用的。 – erisco 2012-02-26 00:47:21
@MattAlcock:發射或推遲gc? (1)這是一個單獨的問題。和。 (2)你爲什麼想要?如果您不想收集對象垃圾,請將其分配給一個變量。 – 2012-02-26 00:59:08