我在这里看到了其他问题,例如:默认的最大 Java 堆大小是如何确定的?和理解java堆
我运行命令以查看我的堆大小,java -XX:+PrintFlagsFinal -version并获得 MaxHeapSize 的输出:
uintx MaxHeapSize := 0 {product}
这是什么意思?
这是 JDK 8 中的一个错误。
MaxHeapSize被限定在热点来源uintx,它表示64位的无符号整数。
在 JDK 8 中,打印标志值的格式uintx是"%-16lu",它将输入视为unsigned long.
但是,C++ 的大小在 Windows 和 Unix 上unsigned long 有所不同:
unsigned long64 位的大小。unsigned long为 32 位。因此,Windows 上的 JDK 8 仅打印低 32 位uintx标志。这就是为什么 ifMaxHeapSize是 4 GiB 的精确倍数,您会看到uintx MaxHeapSize := 0. 这只是印刷错误;实际的最大堆大小是正确的。
该错误在 JDK 9 中作为JDK-8042893更改的一部分进行了修复:
} else if (is_uintx()) {
- st->print("%-16lu", get_uintx());
+ st->print(UINTX_FORMAT_W(-16), get_uintx());
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
590 次 |
| 最近记录: |