我有以下主机的内存详细信息:
$free -m
total used free shared buffers cached
Mem: 7872 7579 292 17 483 3983
-/+ buffers/cache: 3112 4759
Swap: 2047 14 2033
我有一个使用参数 -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
最佳答案
Java 进程使用的内存(如操作系统所见)不仅限于 Java 堆。还有更多的内存区域也应该计算在内:
- 元空间(类元数据所在的位置);
- 代码缓存(存储 JIT 编译的方法和所有生成的代码);
- 直接字节缓冲区;
- 内存映射文件,包括 JVM 映射的文件,例如类路径上的所有 JAR 文件;
- 线程堆栈;
- JVM 代码本身以及 Java Runtime 加载的所有动态库;
- 其他内部 JVM 结构。
使用 NativeMemoryTracking获取 JVM 使用的内存区域的详细分割的 JDK 功能:
java -XX:NativeMemoryTracking=detail -XX:+UnlockDiagnosticVMOptions -XX:+PrintNMTStatistics
关于java - Java中的内存主机和内存参数xms和xmx之间的关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36872551/