为什么在使用java命令调用程序时不使用JavaXMX选项?

为什么在使用java命令调用程序时不使用JavaXMX选项?,java,performance,jvm,Java,Performance,Jvm,可能重复: 我使用 java -Xms32m -Xmx64m xxxclassname 但从最高指挥部,我知道有一个近200MB的内存。为什么它不小于Xmx选项中指定的64MB? -Xmx64m 标志仅控制堆大小。Java需要比这多得多的内存才能正常运行。您正在指定垃圾收集堆的最大大小。Java内存消耗还有其他方面,包括本机代码(不仅是JVM,还有任何加载了JNI的本机库)和空间。(PermGen空间可以进行一些调整,但您确实不想限制太多,否则您的程序将崩溃。)@RNJ-Xmx

可能重复:

我使用

java    -Xms32m -Xmx64m  xxxclassname
但从最高指挥部,我知道有一个近200MB的内存。为什么它不小于Xmx选项中指定的64MB?

-Xmx64m  

标志仅控制堆大小。Java需要比这多得多的内存才能正常运行。

您正在指定垃圾收集堆的最大大小。Java内存消耗还有其他方面,包括本机代码(不仅是JVM,还有任何加载了JNI的本机库)和空间。(PermGen空间可以进行一些调整,但您确实不想限制太多,否则您的程序将崩溃。)

@RNJ-Xmx64m和jvm加载之间的关系是什么?堆并不是所有使用的内存。您看到的大部分额外内存都是共享内存,而不是应用程序专用的。有多少部分内存构成了java使用的who内存?给出了一些存储在堆外的东西的示例。