来自Java的内存主机和内存参数xms和xmx之间的关系

时间:2016-04-26 18:06:01

标签: java linux memory memory-management

我有以下主机的内存详细信息:

$free -m
             total       used       free     shared    buffers     cached
Mem:          7872       7579        292         17        483       3983
-/+ buffers/cache:       3112       4759 
Swap:         2047         14       2033

我有一个使用params -Xms200m -Xmx200m运行的java应用程序,有人可以解释一下为什么VCZ是3800076而RSS是241304(更多是Java参数)

来自ps -aux命令:

66345     6773  0.2  2.9 3800076 241304 ?      Sl   Apr1  12:06 /apps/myapps/myapp1/java/bin/java -Xms200m -Xmx200m

1 个答案:

答案 0 :(得分:17)

Java进程使用的内存(如操作系统所见)不仅限于Java堆。还应该计算更多的内存区域:

  • 元空间(类元数据所在的位置);
  • 代码缓存(JIT编译方法的存储和所有生成的代码);
  • Direct ByteBuffers;
  • 内存映射文件,包括由JVM映射的文件,例如类路径上的所有JAR文件;
  • 线程堆栈;
  • JVM代码本身以及Java Runtime加载的所有动态库;
  • 其他内部JVM结构。

使用NativeMemoryTracking JDK功能获取JVM使用的内存区域的详细分类:

java -XX:NativeMemoryTracking=detail -XX:+UnlockDiagnosticVMOptions -XX:+PrintNMTStatistics