Java进程使用的内存(如OS所示)不仅限于Java Heap。还有更多的内存区域也应计算在内:
- 元空间(类元数据所在的位置);
- 代码缓存(用于JIT编译的方法和所有生成的代码的存储);
- 直接字节缓冲区;
- 内存映射文件,包括由JVM映射的文件,例如,类路径上的所有JAR文件;
- 线程堆栈;
- JVM代码本身以及Java Runtime加载的所有动态库;
- 其他内部JVM结构。
使用NativeMemoryTracking
JDK功能来获取JVM使用的内存区域的详细分类:
java -XX:NativeMemoryTracking=detail -XX:+UnlockDiagnosticVMOptions -XX:+PrintNMTStatistics



