You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

np.ones内存占用不符预期:7.2GB理论值为何仅显示5.3GB?

问题原因解析

1. 初始np.ones内存低于理论值:写时复制(COW)与Windows内存管理

理论上30011×30011的float64数组需占用约7.2GB,但Windows任务管理器显示的是进程实际使用的物理内存(工作集),而非分配的虚拟内存地址空间:

  • 当np.ones创建全1数组时,操作系统会利用写时复制优化:所有值相同的内存页会被共享,仅在数组元素被修改时才会为每个页分配独立物理内存。因此实际物理内存占用远小于理论值,仅需存储少量共享页即可。
  • 任务管理器的统计包含进程内其他小对象,但核心原因是COW机制大幅减少了物理内存的实际占用。

2. x=x*3.14后内存进一步下降:旧数组回收与新数组的COW优化

执行x=x*3.14时,Python会创建一个元素全为3.14的新float64数组,同时原数组失去引用:

  • 原数组的内存会被Python的垃圾回收器标记为可回收,操作系统随即释放其占用的物理内存页。
  • 新数组因元素值完全相同,同样触发操作系统的写时复制优化,仅占用少量共享物理页,因此物理内存占用进一步降低。

3. 数分钟后内存降至1.7GB:延迟垃圾回收与Windows内存压缩/页交换

  • Python的垃圾回收并非实时执行,原数组和中间计算产生的临时对象可能在数分钟后才被彻底回收,释放剩余的物理内存。
  • Windows系统会主动对闲置内存页进行内存压缩,或把不常用的页交换到虚拟内存(页面文件)中,进一步降低进程的物理内存占用(工作集)。

内容的提问来源于stack exchange,提问作者user2153235

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 00:21:01