您无法控制要控制的内容 ,
-Xmx只能控制Java Heap,它不能控制JVM 对 本机内存 的使用,JVM的使用根据实现而完全不同。
从下面的文章中感谢内存(了解JVM如何在Windows和Linux上使用本机内存)
维护堆和垃圾收集器使用您无法控制的本机内存。
需要更多的本机内存来维护维护Java堆的内存管理系统的状态。必须分配数据结构以跟踪空闲存储并记录收集垃圾时的进度。这些数据结构的确切大小和性质随实现的不同而变化,但是许多与堆的大小成正比。
和JIT编译器使用本机内存一样
javac会
字节码编译使用本机内存(与gcc之类的静态编译器需要运行内存的方式相同),但是JIT的输入(字节码)和输出(可执行代码)也必须存储在本机内存中。包含许多JIT编译方法的Java应用程序比较小的应用程序使用更多的本机内存。
然后你有使用本机内存的类加载器
Java应用程序由定义对象结构和方法逻辑的类组成。他们还使用Java运行时类库中的类(例如java.lang.String),并且可能使用第三方库。只要使用这些类,它们就需要存储在内存中。类的存储方式因实现而异。
我什至不会开始引用“线程”部分,我想您会得到一个想法,即
-Xmx它无法控制您认为它控制的内容,它控制着JVM堆,并不是所有东西都在JVM堆中,并且堆占了更多空间。您为管理和簿记指定的本机内存。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)