虚拟内存可以超过物理内存吗?(RAM + 硬盘)?

虚拟内存可以超过物理内存吗?(RAM + 硬盘)?

Glances 程序显示,Google Chrome 页面占用了 1.10 TB 虚拟内存,而我的电脑没有这个容量(RAM + 硬盘)。 在此处输入图片描述

关于这个,quora解释以下内容:“虚拟内存可以超过物理内存。虚拟内存是一种系统内存管理技术,它允许程序通过临时将数据转移到磁盘存储来使用比计算机上物理可用内存更多的内存。即使所有物理内存都在使用中,这也允许程序继续运行。”

具体案例:如果PC有16 GB RAM + 500 GB SSD,虚拟内存在单个进程中是否可以超过物理内存并达到1.10 TB?

谢谢

答案1

是的,虚拟内存范围不仅可以由 RAM/交换或内存映射文件支持,还可以由任何内容支持——可以创建一个巨大的匿名映射,该映射大部分为空,因此不对应于物理 RAM 分配(在 Linux 上也称为“过度提交”),大部分内容仅映射到单个“零”页面。

(请注意这里的“虚拟内存”才不是表示“交换”或“页面文件”——这是 Windows 术语,与 Linux 不符。此处,“虚拟内存”表示抽象虚拟地址空间。

Golang 和 Haskell 运行时过去通过预先创建单个 TB 大小的映射来实现其内部内存分配,而不是像 C malloc() 那样按需创建较小的“区域”。两者现在都停止这样做了,但在过去,Haskell 进程使用 >1TiB 的虚拟内存地址并不罕见。

JavaScript 运行时,例如WebKit JSCore或者Chrome V8实现所谓的“Gigacage”,它保留数十 GB 大小(多个)的空虚拟地址区域,以便在不同类型的分配之间强制保持一定的距离。

相关内容