Python内存限制?在接近限制时清除GC?

3

在执行其他内存密集型操作之前,我该如何清除垃圾收集对象?或者当内存满时是否会自动完成?

为什么Python(+Eclipse)在2GB(Win32)时似乎会抛出内存异常,而实际上Windows上仍有一些未使用的内存?是否有任何定义的限制?


这种高内存使用量是可以预期的,还是存在内存泄漏?如果是后者,就没有垃圾收集器能帮忙了,你必须自己找到并修复泄漏问题。 - user395760
在那种情况下,这是可以预料的,不过我会考虑一些高级功能,在那些功能中我不会一次性加载所有数据,而是只引用存储在硬盘上的某些长数据块。 - Gere
2个回答

4
您可以使用gc模块来调整垃圾收集器的性能,例如使用gc.set_threshold,或者您可以“手动”收集垃圾:gc.collect。然而,我认为大多数情况下,对象在其引用计数归零时立即被收集。
因此,要明确这一点(感谢delnan!),只有当存在循环引用阻止引用计数达到零时,垃圾收集才是一个问题。
请注意gc文档中的这行代码:

要调试泄漏程序,请调用gc.set_debug(gc.DEBUG_LEAK)


3
请注意,CPython 所谓的垃圾收集器仅仅是用于循环引用的垃圾收集器。所有不在循环引用中的对象将通过引用计数在成为不可达时被处理。当然,这假定它们确实变得不可达,并且您没有保留不再需要的引用。 - user395760

1

在Windows 32位应用程序中,最大内存限制为2GB。有一个启动选项可以将其提升到3Gb。您还可以尝试升级到64位的Windows/Python。


升级可能意味着需要更换另一个处理器? :) 我在家里有,但是工作用的计算机都很旧,预算有限... - Gere

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接