繁体   English   中英

Java -Xms和-Xmx测试

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM