【问题标题】:Why is the actual memory footprint of the JVM so much bigger than my Xmx? [duplicate]为什么 JVM 的实际内存占用比我的 Xmx 大得多? [复制]
【发布时间】:2017-11-20 08:30:51
【问题描述】:

我的电脑有 64GB 内存,在 Eclipse 中我设置了默认的 VM 参数,如下所示:

-Xms512m -Xmx9g

我认为 9GB 是我的 Java 应用程序可以使用的最大大小。但是,在我启动我的应用程序一段时间后,我可以从系统监视器中看到我的 Java 应用程序进程正在使用将近 16GB 的内存。怎么会比我设置为 9GB 的 VM 参数大?

【问题讨论】:

  • @Ravi 它看起来不像是重复的,因为问题不是 Xmx 是什么,而是为什么它不能按预期工作。
  • @user697911 你指的是哪个系统监视器,你看的是哪个数字?
  • 当您询问有关 Xmx 的信息时。所以,那里解释得很好。您需要共享您的任务管理器屏幕。向我们展示,因为它需要更多的内存

标签: java memory-management jvm heap-memory


【解决方案1】:

-Xmx 设置用于 Java 对象的 JVM“堆”内存的最大大小(组织为几个“代”:Eden、Survivor、Tenured/Old)。 外部堆JVM也分配:

  • 加载的类和 JIT 代码(根据需要)

  • 线程栈

  • NIO“直接”缓冲区

  • 本机代码:JVM 本身(包括它使用的系统库),以及由 JNI 或 JNA 加载/访问的代码

  • 本机代码管理的数据

第一组在Java 7 中的CodeCache 和PermGen 以及Java 8 中的Metaspace;虽然不在堆中,但它们像堆空间一样通过MemoryPoolMXBean 报告,并且可以通过-XX:MaxPermSize -XX:MaxMetaspaceSize不同 选项进行调整。其余组不能从 Java 报告 AFAIK。可以使用-Xss 设置堆栈大小(但对所有线程全局设置)。

另请参阅What is the difference between Java Non Heap Memory and Stack Memory? Are they Same if not what is the difference between them?Java: non-heap-memory analyzes

【讨论】:

    猜你喜欢
    • 2014-01-11
    • 1970-01-01
    • 2022-10-13
    • 2012-04-01
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    • 2021-10-05
    • 2021-11-17
    相关资源
    最近更新 更多