免费/顶级差异。 free显示虚拟内存吗?

免费/顶级差异。 free显示虚拟内存吗?

free -m在我的系统中显示以下内容:

             total       used       free     shared    buffers     cached
Mem:          3954       3842        111          0        248       2585
-/+ buffers/cache:       1008       2945
Swap:         3811          4       3807

所以内存看起来已经用完了,但top按内存排序显示了以下顶级进程:

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                                                                                                              
 8891 minecraf  20   0 2374m 277m 9.9m S    1  7.0   0:12.21 java                                                                                                                                                                  
 8704 root      39  19 2802m 272m  11m S    0  6.9   0:28.73 java      

java使用的虚拟内存似乎很大,但我在网上了解到这不是问题。所以我想我的问题是:free如果没有那么有意义,为什么要显示虚拟内存?

答案1

“Mem”行free不显示虚拟内存使用情况,它显示物理内存使用情况。

中的“RES”(针对居民)和“%MEM”列向top您显示相同的内容:身体的每个进程正在使用的内存。

free 显示可用和已用交换空间,并top具有“VIRT”列,两者都很重要。粗略地说,交换空间加上物理内存就是您可能的总虚拟内存空间。达到该限制,您将开始杀死进程或无法分配内存,事情会很糟糕。

答案2

由于您可以将虚拟内存映射到文件或库,因此 VIRT 数量可能非常大。我正在运行一个小型 Java 应用程序,它使用 ~6g VIRT 内存,但 RESident 为 59m。

java使用的虚拟内存似乎很大,但我在网上了解到这不是问题

虚拟内存不那么重要的原因是,当不使用它或需要空闲驻留内存时,它会被分页到交换空间(硬盘存储)。交换空间中的东西去那里是有原因的;因为它很少使用(或者根本不使用,但只是在某处引用)。如果您使用的是 64 位操作系统,您可以处理比您使用的更多的地址,而让虚拟内存管理器担心。

这篇博文对编程中的虚拟内存有一些评论:http://antirez.com/post/what-is-wrong-with-2006-programming.html

首先,您不应该将频繁使用的数据从 RAM 交换到 HDD,这就是为什么您被告知 Java 分配大量内存不是问题。

相关内容