最小Oracle Java VM堆内存设置?
Oracle的JVM是否有最小-Xmx设置?看起来-Xmx2M确实为应用程序提供了超过2MB的堆大小,正如Java内存MXbean告诉我的那样,它分配了大约10MB的内存 是否存在JVM默认忽略Xmx设置的最小值最小Oracle Java VM堆内存设置?,java,jvm,Java,Jvm,Oracle的JVM是否有最小-Xmx设置?看起来-Xmx2M确实为应用程序提供了超过2MB的堆大小,正如Java内存MXbean告诉我的那样,它分配了大约10MB的内存 是否存在JVM默认忽略Xmx设置的最小值 public static void main(String[] args) { System.out.println("Heap size is " + Runtime.getRuntime().totalMemory() / 100000 / 10.0 + " MB");
public static void main(String[] args) {
System.out.println("Heap size is " + Runtime.getRuntime().totalMemory() / 100000 / 10.0 + " MB");
}
使用Java 7上的-mx8m
更新25 64位
Heap size is 8.0 MB
但是如果我使用-mx2m
运行,我会
Heap size is 3.2 MB
因此,看起来您得到的堆比非常小的尺寸要求的堆稍多。然而,即使对于一个小型移动设备,我也不会担心最后的每一个MB,因为JVM本身要大得多(可以超过100 MB的共享内存、线程等)
i、 e.如果你不能腾出几MB的空间,你无论如何也无法运行JVM。JVM需要启动至少2mb的heapsize。您可以将堆大小设置为0字节,但jvm不会启动。
建议的最大堆大小是总ram的1/4。当堆很小时,它只是JVM大小的一小部分。我不知道为什么这一点很重要。我正在开发一个在低内存条件下延迟加载(和卸载)的框架,我想测试我的框架的最小Xmx设置是什么。我知道这个页面,但找不到任何记录在案的最小Xmx设置。我假设一个真正的应用程序会比你的框架做得更多。如果您可以使用可以设置的最小堆运行,我不确定问题是什么。这有点奇怪:最小堆大小似乎是2M,否则JVM根本无法启动。但是,如果指定了2M,我们将得到3.2M。这个问题是否有一个明确的答案:为什么会这样?我只能猜测它为JVM的启动增加了一些功能,但我不确定。也许阅读OpenJDK的源代码会有一个关于为什么这样做的评论。