何时在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