这个native heap和机器的物理内存,虚拟内存,linux free命令下:的
total used free shared buffers cached
以及top命令下的:
VIRT RES SHR
有何关系?
这个native heap和机器的物理内存,虚拟内存,linux free命令下:的
total used free shared buffers cached
以及top命令下的:
VIRT RES SHR
有何关系?
3 回答2.6k 阅读✓ 已解决
3 回答4.1k 阅读✓ 已解决
8 回答3.6k 阅读
4 回答2.7k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
3 回答2.5k 阅读✓ 已解决
3 回答1.7k 阅读✓ 已解决
应该说这几个概念上都不太一样, 简单地说:没有什么关系.
free下的输出是操作系统当前的状态, 全部进程内存使用情况的累加:
total:表示物理内存总量(total = used + free)
used:表示总计分配给缓存(包含buffers 与cache )使用的数量,但其中可能部分缓存并未实际使用。
free:未被分配的内存。
shared:共享内存,主要用于tmpfs。
buffers:系统分配但未被使用的buffers 数量。
cached:系统分配但未被使用的cache 数量。
top分别列出每个进行的使用情况:
VIRT 意味着进程虚拟空间的大小, 是真实使用的内存,加上映射进程自己使用的内存(如, X server使用显卡内存), 加上映射磁盘文件使用的内存(主要是加载共享程序库文件), 加上与其他进程共享的内存. VIRT代表进程当前时刻有多少内存可以访问.
RES 意味驻留内存大小, 是当前进程真正占用物理内存的精确反映. (直接与%MEM列相对应.) RES始终要比VIRT小, 因为多数程序依赖C库文件.
SHR 表示VIRT里有多少其实是共享部分(库文件使用的内存). 关系到库文件里, 并不是整个的库文件会驻留. 如, 如果程序仅用到了库文件里的少数函数, 整个库文件会映射并被计算到VIRT和SHR里, 但只有库文件包含用到的函数那部分真正加载到内存并被计算到RES里.
至于java的native memory space,只是java进程的内部分配关系.
参见下图