我写了一个扩展素数的数据库的程序。这个程序是用python编写的,并且运行在Windows 8(x64)和8GB RAM上。使用比可用内存更多的内存
该程序将存储的所有素数存储在list
的integers
中作进一步计算,并在运行时使用RAM的大约6-7GB
。然而,在一些运行中,这个数字降到了100MB
以下。内存使用率在运行期间保持低电平,尽管随着更多数字添加到主阵列中而增加。请注意,并非所有运行都会导致内存丢失。
的内存使用任务管理器测量
这些,看似随意,滴,导致我下面的说法:
- 有一个在我的代码中的错误,使其跌落关键的数据和搞乱结果(最有可能但不被结果支持)
- Python恰好在一段时间后极好地优化了我的代码。
- Python或Windows正在通过清理我的素数数组中未使用过多的部分来补偿RAM的过度使用。 (最终导致计算错误)
- Python或Windows正在通过分配磁盘空间而不是RAM来补偿RAM过度使用。
问题
- 可能是什么这个内存的原因(S)下降?
- python如何处理使用超过可用RAM的程序?
- Windows如何处理使用多于可用RAM的程序?
我是否正确地假设RAM中剩下的是最常用的数据(意味着列表的第一部分,几乎总是被迭代)以及最新添加的数据(最后一部分列表)?而最没有用的数据(中间)被发送到交换空间? –
@FelixZY:也许吧。 Windows(管理虚拟内存)不知道列表的哪一部分是哪一部分。这只是记忆的一页,其中一些似乎比其他的更频繁地使用。操作系统将那些看起来并没有太多用处的东西换掉,作为一名应用程序编写者,您对哪一部分没有太多的控制或知识。 –