Java JVM MaxHeapSize:=0-这意味着什么?
我在这里看到了其他问题,比如:和 我运行命令查看我的堆大小Java JVM MaxHeapSize:=0-这意味着什么?,java,jvm,Java,Jvm,我在这里看到了其他问题,比如:和 我运行命令查看我的堆大小java-XX:+PrintFlagsFinal-version,并获得MaxHeapSize的输出: uintx MaxHeapSize:=0{product} 这是什么意思?这是JDK 8中的一个bug MaxHeapSize作为uintx在热点源代码中,表示64位无符号整数 在JDK 8中,用于打印uintx标志值的值是“%-16lu”,它将输入视为无符号长 但是,Windows和UNIX:C++的代码>未签名的长< /C> >的大
java-XX:+PrintFlagsFinal-version
,并获得MaxHeapSize的输出:
uintx MaxHeapSize:=0{product}
这是什么意思?这是JDK 8中的一个bug
MaxHeapSize
作为uintx
在热点源代码中,表示64位无符号整数
在JDK 8中,用于打印uintx
标志值的值是“%-16lu”
,它将输入视为无符号长
但是,Windows和UNIX:C++的代码>未签名的长< /C> >的大小:
- 大多数类Unix系统都是LP64,其中
的大小为64位无符号long
- Windows上的Visual C++是LLP64,其中代码<未签名的长< /C> >为32位。
uintx
标志。这就是为什么如果MaxHeapSize
是4gib的精确倍数,您将看到uintx MaxHeapSize:=0
。这只是打印错误;实际最大堆大小是正确的
作为变更的一部分,该缺陷在JDK 9中得到了修复:
这意味着,您在Windows上运行64位JDK 8(或更早版本),最大堆大小(-Xmx)是4 GiB的精确倍数。我刚刚通过运行
java-Xmx4g-XX:+printflasfinal-version
验证了这一点,并且可以重现MaxHeapSize:=0
。你能解释一下为什么会这样吗?
} else if (is_uintx()) {
- st->print("%-16lu", get_uintx());
+ st->print(UINTX_FORMAT_W(-16), get_uintx());