java - Java中的内存主机和内存参数xms和xmx之间的关系

标签 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

我有一个使用参数 -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/

相关文章:

java - java中的360度运动示例

java - 在 Web 应用程序中管理 MySql 数据库连接

python - 如何在 Linux 上使用 python 检查 NTFS 分区上的隐藏文件和文件夹?

linux - 在ansible中获取root权限

linux - netfilter Hook 函数内存引用使我的系统崩溃

Linux:在我的进程中管理虚拟内存映射以进行快速仿真

java - 对 thread.yield 的描述是否正确?

java - 比较java中的两个可能为空的值

java - onLowMemory 事件测试

linux - POSIX 线程何时取消不立即?