[英]Java -Xms and -Xmx test
我做了一个类,Main包含这样的main方法:
public class Main {
public static void main(String[] _args) {
System.out.println("free:" + Runtime.getRuntime().freeMemory()
+ ". max:" + Runtime.getRuntime().maxMemory());
}
}
然后我用-Xms2m和-Xmx2m运行该类。 输出是这样的:
free:2984840. max:7471104
那么,我的问题是,如果兆字节为1048576bytes,则显示的可用内存不是-Xms中设置的2megabytes。 当我将-Xms选项增加到3m时,它显示免费增加了一个兆字节。 任何人都可以解释发生了什么。
-Xmx选项会发生另一种情况,当我将其增加到3m,4m和5m时,最大值一直显示为7471104.约为71.44m。 我不太明白这两个选项是如何工作的。
这是我设置-Xms3m和-Xmx6m时打印的内容
free:4033416. max:7471104
任何人都可以提供帮助。
谢谢 :)
注意:我正在使用Win7 x64和Java 1.6 update 35。
JVM在如何分配内存方面有限制,这并不明显。 这意味着它仅将您提供的尺寸作为提示,将严格遵循该提示。 对于非常小的内存大小,这些差异会更加明显,但是即使您要求20 GB的空间也不会恰好是20 GB。
堆不仅包含应用程序分配的数据,还包含VM分配的对象(例如,代表类的对象)。 Hotspot VM的占用空间肯定大于您设置为最大堆大小的空间。 这就是实际堆大小更大的原因。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.