【发布时间】:2015-02-17 04:25:06
【问题描述】:
根据GC ergonomics,默认的最大堆大小应该是“小于物理内存的 1/4 或 1GB”。
读到我希望 jvm 在具有 96GB 内存的服务器级机器上的默认最大堆大小为 1GB(96GB/4 中较小的一个 = 24GB 或 1GB)。
但是,当我编译并运行以下代码时,它会写出21463(即关于21GB)。
public class Main{
public static void main(String[] args) {
System.out.println(Runtime.getRuntime().maxMemory() / 1024 / 1024);
}
}
如果有问题:java -version 产生
java version "1.7.0_45"
Java(TM) SE Runtime Environment (build 1.7.0_45-b18)
Java HotSpot(TM) 64-Bit Server VM (build 24.45-b08, mixed mode)
总结一下,如果我正确阅读了文档,默认的最大堆大小应该不大于 1GB,但实际上它大约是服务器内存的 1/4。怎么会?
【问题讨论】:
-
什么是 Xmx 参数设置来调用 java main ?
-
它还指出:为堆大小指定的边界和分数对于 J2SE 5.0 是正确的。随着计算机变得更强大,它们在后续版本中可能会有所不同。 .也许他们只是忘记调整文档
-
好吧,文档确实提到了使用并行垃圾收集器时的具体情况;那是配置的吗? Java 7 的发行说明特别提到默认参数也发生了变化:docs.oracle.com/javase/7/docs/technotes/guides/vm/…
-
@ChristianDietrich 没有 Xmx 参数,问题是关于默认的最大堆大小。