近期在公司中解决程序使用的内存高问题,将一部分之前无法回收的内存进行了回收,实现降内存效果(降实存)。
在统计效果时, QA问是统计RES(实存)还是VIRT(虚存)。
在网上学习看了一些博客,这里自己总结一下RES和VIRT的区别。
1. 概念
VIRT:
1、进程“需要的”虚拟内存大小,包括进程使用的库、代码、数据,以及malloc、new分配的堆空间和分配的栈空间等;
2、假如进程新申请10MB的内存,但实际只使用了1MB,那么它会增长10MB,而不是实际的1MB使用量。
3、VIRT = SWAP + RES
RES:
1、进程当前使用的内存大小,包括使用中的malloc、new分配的堆空间和分配的栈空间,但不包括swap out量;
2、包含其他进程的共享;
3、如果申请10MB的内存,实际使用1MB,它只增长1MB,与VIRT相反;
4、关于库占用内存的情况,它只统计加载的库文件所占内存大小。
5、RES = CODE + DATA
SHR:
1、除了自身进程的共享内存,也包括其他进程的共享内存;
2、虽然进程只使用了几个共享库的函数,但它包含了整个共享库的大小;
3、计算某个进程所占的物理内存大小公式:RES – SHR;
4、swap out后,它将会降下来。
2. 测试
(1) 使用堆分配内存, 进行测试:
1 #inc

本文介绍了Linux下进程内存使用情况,重点分析了VIRT(虚拟内存)和RES(实占内存)的区别。VIRT包括库、代码、数据等,而RES仅计算实际使用的内存。通过堆和栈分配内存的测试,说明未使用的内存不会占用实存。在实际工作中,高虚存可能意味着大量内存被申请但未使用。
最低0.47元/天 解锁文章
3082

被折叠的 条评论
为什么被折叠?



