her*_*rby 8 python memory-management
我的python代码进程内存动态增加,因为它在必要时将动态数据存储在列表,字典和元组中.虽然在那之后所有这些动态数据都在其变量中被物理清除,但内存并没有被击落.
因此,我觉得有一个内存泄漏,我使用gc.collect()方法收集所有不同意的内存.但是当变量中没有数据时,我无法将内存降至最低.
一般来说,对于"将内存返回到操作系统"的过程来说非常困难(当然,直到进程终止并且操作系统返回所有内存),因为(在大多数实现中)malloc大块的回报是什么为了提高效率,但是如果它的任何部分仍在使用中,那么整个块都无法返回 - 因此,大多数C标准库甚至都没有尝试过.
有关Python上下文中的体面讨论,请参阅此处.Evan Jones解决了这里和这里描述的一些特定于Python的问题,但是他的补丁在Python 2.5之后就在主干中了,所以你所观察到的问题肯定是系统malloc包,而不是Python本身.这里和这里有一个2.6特定的解释.
一个SO线程就在这里,休·艾伦在他的回答中引用了Firefox程序员,以至于Mac OS X是一个系统,在这个系统中,进程基本上不可能将内存返回给操作系统.
因此,只有通过终止进程才能确保释放其内存.例如,长时间运行的服务器可能会将其状态快照到磁盘并关闭(使用微小的监视程序进程,系统或自定义,监视它并重新启动它).如果您知道下一个操作会在短时间内占用大量内存,通常可以os.fork在子进程中执行内存耗尽的工作,并将结果(如果有)通过管道返回到父进程子进程终止.等等等等.