为什么JVM的实际内存占用量比我的Xmx大得多?

问题描述:

我的电脑有64GB的内存,并在Eclipse中我设置的默认VM参数,像这样:为什么JVM的实际内存占用量比我的Xmx大得多?

-Xms512m -Xmx9g 

我以为9GB的最大尺寸我的Java应用程序可以利用的。但是,在我开始我的应用程序一段时间后,我可以从系统监视器看到我的Java应用程序进程正在使用近16GB的内存。它如何比我设置为9GB的VM参数大?

+1

@Ravi它看起来并不像一个重复的看,因为这个问题是不是XMX是什么,而是它为什么不能按预期工作。 – Harald

+0

@ user697911你指的是哪个系统监视器,你究竟看到了哪个数字? – Harald

+0

当您询问有关'Xmx'的信息时。所以,这里有很好的解释。你需要分享你的任务管理器屏幕。向我们展示,因为它需要更多的记忆 – Ravi

-Xmx设置用于Java对象(组织成几代“Eden”,“Survivor”,“Tenured/Old”)的JVM“堆”内存的最大大小。 堆JVM还分配:

  • 装入的类,和即时编译代码(如需要)

  • 线程堆栈

  • NIO '直接' 缓冲器

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

  • 由本机代码

第一组管理个

  • 数据是在CodeCache和PermGen的通过Java 7和元空间在Java 8;尽管不在堆中,但是这些通过MemoryPoolMXBean像堆空间那样报告,并且可以通过不同的选项如-XX:MaxPermSize -XX:MaxMetaspaceSize进行调整。剩下的组不能从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