JVM MaxHeapSize:= 0-这是什么意思?

时间:2020-08-06 22:12:38

标签: java jvm

我在这里还看到了其他问题,例如:How is the default max Java heap size determined?Understanding java heap

我运行命令以查看堆大小java -XX:+PrintFlagsFinal -version,并获得MaxHeapSize的输出:

uintx MaxHeapSize := 0 {product}

这是什么意思?

1 个答案:

答案 0 :(得分:5)

这是JDK 8中的错误。

MaxHeapSize在HotSpot源中为uintx的{​​{3}},代表64位无符号整数。

在JDK 8中,用于打印uintx标志值的defined"%-16lu",它将输入视为unsigned long

但是,在Windows和Unix上,C ++ unsigned long format的大小:

  • 大多数类似于Unix的系统都是LP64,其中unsigned long的大小为64位。
  • Windows上的Visual C ++为LLP64,其中unsigned long的大小为32位。

因此,Windows上的JDK 8仅打印uintx标志的低32位。因此,如果MaxHeapSize是4 GiB的精确倍数,则会看到uintx MaxHeapSize := 0。这只是打印错误。实际的最大堆大小是正确的。

作为differs更改的一部分,该错误已在JDK 9中修复:

     } else if (is_uintx()) {
-      st->print("%-16lu", get_uintx());
+      st->print(UINTX_FORMAT_W(-16), get_uintx());