JAVA8里的native heap究竟是个什么概念?

这个native heap和机器的物理内存,虚拟内存,linux free命令下:的

         total       used       free     shared    buffers     cached
       

以及top命令下的:

   VIRT  RES  SHR 
   

有何关系?

阅读 7.1k
1 个回答

应该说这几个概念上都不太一样, 简单地说:没有什么关系.

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进程的内部分配关系.
参见下图

java-heap

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏