我有一个保存在文件中的字典。 我从python交互式shell将字典加载到内存中,我的系统监视器说python进程消耗4GB。 以下命令提供以下输出:

size1 = sys.getsizeof(mydict)/(1024**2)
print size1

96

size2 = 0
for i in mydict.keys():
    size2 += sys.getsizeof(i)
print size2/(1024**2)

37

size3 = 0
for i in mydict.keys():
    size3 += sys.getsizeof(mydict[i])
print size3/(1024**2)

981

size4 = 0
for i in mydict.keys():
    for j in mydict[i]:
        size4 += j
print size4/(1024**2)

2302

print str(size1 + size2 + size3 + size4)

3416

现在,如果我删除字典

del(mydict)
gc.collect()

从内存中释放不到400MB。 即使我从字典中的列表中逐个删除所有项目,释放的内存不超过450-500 MB ..所以我最终在我的shell中没有变量,但仍然消耗3,5GB。谁能解释一下发生了什么?

===============>>#1 票数:2 已采纳

要记住两件事:

即使您删除整个对象,python也可能会保留该内存以供进一步使用(而不是稍后再次分配内存)。 python在os中留下的足迹不会发生显着变化。

在基于Linux和UNIX的系统上,在应用程序终止之前,进程不一定会返回已分配的内存。

为了成功释放内存,您可能需要查看垃圾收集器 有了它,你可以强制python释放分配的内存。

  ask by tk66 translate from so

未解决问题?本站智能推荐:

1回复

jQuery-使用.remove()/。after()的内存泄漏/垃圾回收

在整个周末都保持浏览器窗口打开后,今天早上,我带着软管的IE来到办公室。 我正在做一个“统计”仪表板栏,该栏每30秒更新一次。 返回是一个html字符串,作为完整的xcontents 我将其附加到DOM,在我的“真实” div #ajaxreturn之后,它实际上会执行其他操作。
1回复

dict pop不释放内存

看起来垃圾收集器不会从python 2.7中的dict()收集值' pop '(没有尝试python 3)。 这是一个例子: 谁知道为什么会这样,以及如何解决这个内存泄漏问题?
3回复

Python中使用Pickle的MemoryError

我正在处理一些数据,我已将结果存储在三个词典中,并且我已将它们保存到使用Pickle的磁盘中。 每个字典有500-1000MB。 现在我正在加载它们: 但是,我已经在加载第一个字典了: 怎么解决这个? 我的电脑有16GB的RAM,所以我觉得加载一个800MB的字典崩溃是
1回复

PyYAML的内存泄漏

我认为在使用库PyYAML加载.yml file时遇到内存泄漏。 我已按照以下步骤操作: 进程使用的内存(我在top或htop获得了内存)已从60K增长到160M而文件大小小于1M 。 然后,我完成了下一个命令: 并且它返回的值小于400K 。 我也尝试过将垃圾
1回复

Python如何处理TCP响应,您不输入变量?

我正在研究domotica程序(Extron),并且遇到内存问题。 因此,我想知道Python如何处理TCP响应,而我没有将其放入变量中。 我有以下代码行: SendAndWait命令通常用于将响应放入变量中,但我使用它来减慢编程速度并确保设备已准备好下一条命令。 但是,不
2回复

长期运行C ++应用程序中的内存泄漏

我正在运行一个长期运行的C ++应用程序,它分配不同的对象并将其存储在几个deque和map中,并且一次从这些数据结构中释放这些对象。我正在经历少量的内存增加(通常为1 mb到2我已经运行了内存泄漏检测器(valgrind),但我找不到任何可疑的内存泄漏。 我想知道问题是否与deque和存储对
1回复

Ncurses'new_item'函数内存泄漏或我在做什么错?

我正在Ncurses中创建日历,这意味着我必须动态分配和释放内存。 事实是Valgrind --leak-check = full在new_item函数中显示内存泄漏。 这是我的代码。 我究竟做错了什么? Valgrind输出 在0x4C282B8的丢失记录62 of 9
1回复

在类的构造函数中初始化映射时,如何避免内存泄漏?

我想在类的构造函数中初始化(指向a) map 。 我编写的程序编译但由于分段错误而在运行时失败。 我可以解决由分配内存的问题map动态,但Valgrind告诉我有关内存泄漏。 如何正确初始化类? 这是一个例子 #include <iostream> #include &
6回复

Python:减少字典的内存使用量

我正在尝试将几个文件加载到内存中。 这些文件具有以下3种格式之一: string TAB int 字符串TAB浮点数 int TAB float。 实际上,它们是ngram静态文件,以防这有助于解决方案。 例如: 目前,我正在做的伪代码是 令
1回复

为什么python字典会占用这么多内存?

我已经看到了与此类似的问题 ,但我认为我的困境在足以提出新问题的方式上有所不同。 我创建了一个函数,该函数将打开一个csv文件,并根据维度和指标列表将数据聚合为类似json的字典结构。 问题是当我用它打开一个0.97GB的文件时,当我查看进程时,python进程正在使用大约1.02G