linux里的VIRT和RES

对 VIRT 和 RES 两个区域做下解释:

  • VIRT(virtual memory usage):进程“需要的”虚拟内存大小,包括进程使用的库、代码、数据,以及malloc、new分配的堆空间和分配的栈空间等,另外 VIRT = SWAP + RES,其中 swap 区域是需要内存置换的区域(可参考操作系统虚拟内存原理)。
  • RES(resident memory usage):又称为 RSS,是进程在 RAM 中真正占用的内存大小。RES 包含了它所链接的动态库被加载到物理内存中的内存、栈内存和堆内存。动态链接库占用的内存会被多个进程共享,所以RSS并不能准确反映单进程的内存占用情况。

有人对 RES 区域做了详细的解释如下图:
在这里插入图片描述

即 RSS 内存区域包括了线程堆栈、直接内存、通过mmap映射的文件和JVM字节码等。详细说明参考:https://stackoverflow.com/questions/38597965/difference-between-resident-set-size-rss-and-java-total-committed-memory-nmt