30,011x30,011 的 64 位浮点数需要 7.2GB。 对于为什么人们可能会看到
np.zeros([30011,30011])
占用(比如说)0.7MB 的微小空间,有很多解释。 然而,我的 Windows 2010 任务管理器也显示内存明显少于预期 np.ones([30011,30011])
。 具体来说,5.3GB,比预期的 7.2GB 少了近 2GB。
对此有何解释?
后注: 5.3GB 包括主命名空间中除
x=np.ones([30011,30011])
之外的其他对象,尽管是较小的对象。更奇怪的是,x=x*3.14
导致内存使用量进一步下降至 3GB。即使我没有做任何事情,它在几分钟内进一步下降到 1.7GB。
任务管理器显示非虚拟内存使用情况,其占用空间比 Python 使用的虚拟内存小得多。
可以使用 Windows 2010 的“资源监视器”应用程序查看虚拟和非虚拟内存占用情况。 我发现了 3 种运行它的方法。 第一种方式:任务管理器的“性能”选项卡有一个“打开资源监视器”的链接。
第二种方式是我在网上找到的,比较迂回。 也可以通过单击桌面左下角的Windows按钮来访问它,然后搜索并运行
perfmon
。 在生成的性能监视器应用程序中,左侧有一个导航窗格。点击顶部的“效果”行项目。主要区域有上半部分和下半部分,上半部分是“性能监视器概述”。在该区域中,单击“打开资源监视器”链接。
第三种方法是点击桌面左下角的Windows图标,搜索“资源监视器”。
打开资源监视器后,有两种方法可以查看内存使用情况。 如果选择顶部的“概述”选项卡,则会显示 4 个部分,最后一个部分是“内存”。 在其中的表中,“提交”列似乎是虚拟内存,而“工作集”列是真实内存占用。
在资源监视器中查看内存使用情况的第二种方法是选择顶部的“内存”选项卡。 同样,在所示的表中,“提交”列似乎是虚拟内存,而“工作集”列是真实内存占用。
感谢 this Q&A 暗示访问资源监视器的初始(迂回)方式,并感谢 o1cc 和 jasonharper 指示虚拟内存和非虚拟内存之间的区别(在最初发布的评论下)问题)。