没有swapspace,虚拟内存如何存在?
How can virtual memory exist when there is no swap space?
在 运行 "free" 命令上,我看到使用的内存是:
total:3854884
used:3752304
free:102580
shared:352
buffers:9252
cached:150908
-/+ buffers/cache:
使用:3592144
免费:262740
Swap: 0 0 0
但是在运行htop
,我看到有很多进程在VIRT列(虚拟内存)下使用了4507M的内存。 RES 列(进程正在使用的物理 RAM)显示 209M。 SHR(共享内存)为5352M。
-Xmx
进程配置为 2048m
。
如果交换 space 为零,如何使用虚拟内存?
这些程序(htop 等)计算的虚拟内存只是进程请求的地址大小 space。您有物理内存、实际 RAM 和一个虚拟地址 space,它将地址映射为用户 space 程序看到的地址到物理内存。它们是分开的。 0x0ff84560
指针可能实际上并不引用 RAM 的那部分。 OS 开始设置映射,决定您实际引用的 RAM 中的位置。更进一步,它可以在有 RAM 备份之前设置映射。这是一个事件驱动的过程。 OS 将根据请求设置映射,没有实际支持,没有分配物理内存,只有在您尝试使用虚拟内存时才实际将其映射到实际 RAM。
虚拟内存的大小就是这个映射的大小。但并非所有这些都必须由物理 RAM 支持,因此即使没有交换,它也可以比 RAM 大。但这会导致程序尝试实际 使用 比 RAM 更多的内存。如果他们只要求它,那完全没有问题,只有他们使用它。
此外,正如 Thilo 提到的,内存映射文件可以添加到此。您可以将整个 100TB 文件映射到您的虚拟地址 space 没问题。 OS 在后台处理后勤工作:引入您需要的部分(您尝试访问的部分)并获取必须清除物理内存的部分。
在 运行 "free" 命令上,我看到使用的内存是:
total:3854884
used:3752304
free:102580
shared:352
buffers:9252
cached:150908
-/+ buffers/cache:
使用:3592144
免费:262740
Swap: 0 0 0
但是在运行htop
,我看到有很多进程在VIRT列(虚拟内存)下使用了4507M的内存。 RES 列(进程正在使用的物理 RAM)显示 209M。 SHR(共享内存)为5352M。
-Xmx
进程配置为 2048m
。
如果交换 space 为零,如何使用虚拟内存?
这些程序(htop 等)计算的虚拟内存只是进程请求的地址大小 space。您有物理内存、实际 RAM 和一个虚拟地址 space,它将地址映射为用户 space 程序看到的地址到物理内存。它们是分开的。 0x0ff84560
指针可能实际上并不引用 RAM 的那部分。 OS 开始设置映射,决定您实际引用的 RAM 中的位置。更进一步,它可以在有 RAM 备份之前设置映射。这是一个事件驱动的过程。 OS 将根据请求设置映射,没有实际支持,没有分配物理内存,只有在您尝试使用虚拟内存时才实际将其映射到实际 RAM。
虚拟内存的大小就是这个映射的大小。但并非所有这些都必须由物理 RAM 支持,因此即使没有交换,它也可以比 RAM 大。但这会导致程序尝试实际 使用 比 RAM 更多的内存。如果他们只要求它,那完全没有问题,只有他们使用它。
此外,正如 Thilo 提到的,内存映射文件可以添加到此。您可以将整个 100TB 文件映射到您的虚拟地址 space 没问题。 OS 在后台处理后勤工作:引入您需要的部分(您尝试访问的部分)并获取必须清除物理内存的部分。