回收Python中大对象的内存 - Windows和Ubuntu差异

时间:2014-10-14 01:56:10

标签: python ubuntu garbage-collection

当我在Ubuntu上运行以下代码并在htop中观看时,它会以900 MB的内存使用量达到峰值,直到sleep()完成:

import random
import gc
import time

large_dict = {}
for x in xrange(50000):
    large_row = {}
    for y in xrange(125):
        large_row[random.randint(1, 10000000000)] = random.randint(1, 10000000000)
    large_dict[random.randint(1, 10000000000)] = large_row


# Force a sweep
large_dict = {}
del large_dict
gc.collect()

time.sleep(60)

但是,当我在Windows上运行并观察任务管理器时,gc.collect()之后的内存使用量只有几个月。

我在Ubuntu中使用Python 2.7.3,2.7.4和2.7.8尝试了这个代码,结果相同。

为什么Windows和Ubuntu的行为有所不同?我更喜欢Ubuntu像Windows一样行动并在gc.collect()之后释放内存。

1 个答案:

答案 0 :(得分:1)

  

免费列表增长的事实似乎并不是什么大问题   因为它包含的内存仍然可以被Python访问   程序。但从操作系统的角度来看,你的程序的大小是   分配给Python的总(最大)内存。自Python返回   内存到堆上的操作系统(分配除了小的其他对象)   对象)仅在Windows上,如果你在Linux上运行,你只能看到   程序使用的总内存增加。

http://deeplearning.net/software/theano/tutorial/python-memory-management.html