我在centos7 64bit盒子(总共512Mb内存)上运行了以下内存参数的java程序:
-Xms80M
-Xmx128M
-XX:MaxPermSize=64M
-XX:MaxDirectMemorySize=32M
从jvisualvm配置文件中我可以看到它的内存使用量是最大130M(最大使用堆+最大使用的Perm),但是从linux pmap命令或top命令它说它使用了大约310M,这占用了我的大部分服务器物理内存:
KiB Mem : 500840 total, 7700 free, 354256 used, 138884 buff/cache
KiB Swap: 0 total, 0 free, 0 used. 109924 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
16844 root 20 0 1017504 311272 10388 S 0.7 62.1 4:43.65 java
我想知道为什么pmap(top)统计数据与我的分析结果之间存在巨大差异,哪些是准确的?