【问题标题】:Using more memory than available使用比可用内存更多的内存
【发布时间】:2017-01-28 21:38:34
【问题描述】:

我编写了一个扩展素数数据库的程序。该程序是用 python 编写的,在具有 8GB RAM 的 Windows 10 (x64) 上运行。

程序将它找到的所有素数存储在integerslist 中以供进一步计算,并在运行时使用大约6-7GB 的RAM。然而,在某些运行期间,该数字已降至100MB 以下。然后,内存使用率在运行期间保持较低,但随着更多数字添加到素数数组中,内存使用率会按预期增加。请注意,并非所有运行都会导致内存下降。

使用任务管理器测量内存使用情况

这些看似随机的掉落物使我产生了以下理论:

  1. 我的代码中有一个错误,导致它丢失了关键数据并弄乱了结果(很可能,但结果不支持)
  2. Python 恰好在一段时间后很好地优化了我的代码。
  3. Python 或 Windows 正在通过清除我的素数数组中不常用的部分来补偿我对 RAM 的过度使用。 (最终导致计算错误)
  4. Python 或 Windows 正在通过分配磁盘空间而不是 ram 来补偿我对 RAM 的过度使用。

问题

  1. 此内存下降的原因可能是什么?
  2. python 如何处理使用超过可用 RAM 的程序?
  3. Windows 如何处理使用超过可用 RAM 的程序?

【问题讨论】:

    标签: python windows memory memory-management


    【解决方案1】:

    1、2 和 3 是不正确的理论。

    4 是正确的。 Windows(不是 Python)正在将您的一些进程内存移动到交换空间。这对您的应用程序几乎是完全透明的——您不需要做任何特别的事情来响应或处理这种情况。您会注意到的唯一一件事是您的应用程序可能会随着信息写入磁盘和从磁盘读取而变慢。但这一切都是透明地发生的。请参阅https://en.wikipedia.org/wiki/Virtual_memory 了解更多信息。

    【讨论】:

    • 我是否正确假设 RAM 中剩下的是最常用的数据(意味着列表的第一部分,几乎一直在迭代)以及最新添加的数据 (列表的最后一部分)?而最不被使用的数据(中间)被发送到交换空间?
    • @FelixZY:也许吧。 Windows(管理虚拟内存)不知道列表的哪一部分是哪一部分。它只是内存页,其中一些似乎比其他更频繁地使用。操作系统会换掉那些似乎不怎么使用的东西,作为应用程序编写者,您对哪个是哪个没有太多控制或知识。
    【解决方案2】:

    你听说过分页吗? Windows 将一些内存(一段时间未使用)转储到您的硬盘驱动器,以防止您的计算机耗尽或内存并最终崩溃。

    只有 Windows 处理内存管理。不过,如果您使用 Windows 10,它也会压缩您的内存,有点像 zip 文件。

    【讨论】:

    • 我听说过分页,但我不确定它是否可以以这种方式应用。请参阅我的问题中的理论 #4。
    • 是的,Python 应用程序与其他应用程序没有任何不同。
    猜你喜欢
    • 1970-01-01
    • 2013-11-14
    • 1970-01-01
    • 2011-03-31
    • 2013-04-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多