当我在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()之后释放内存。
答案 0 :(得分:1)
免费列表增长的事实似乎并不是什么大问题 因为它包含的内存仍然可以被Python访问 程序。但从操作系统的角度来看,你的程序的大小是 分配给Python的总(最大)内存。自Python返回 内存到堆上的操作系统(分配除了小的其他对象) 对象)仅在Windows上,如果你在Linux上运行,你只能看到 程序使用的总内存增加。
http://deeplearning.net/software/theano/tutorial/python-memory-management.html