我在这里看到了其他问题,如:How is the default max Java heap size determined?和Understanding java heap的函数
我运行该命令以查看堆大小java -XX:+PrintFlagsFinal -version
,并得到MaxHeapSize的输出:uintx MaxHeapSize := 0 {product}
个
这是什么意思呢?
我在这里看到了其他问题,如:How is the default max Java heap size determined?和Understanding java heap的函数
我运行该命令以查看堆大小java -XX:+PrintFlagsFinal -version
,并得到MaxHeapSize的输出:uintx MaxHeapSize := 0 {product}
个
这是什么意思呢?
1条答案
按热度按时间pwuypxnk1#
这是JDK 8中的一个错误。
MaxHeapSize
在HotSpot源代码中定义为uintx
,表示64位无符号整数。在JDK 8中,打印
uintx
标志值的格式为"%-16lu"
,它将输入视为unsigned long
。但是,C++
unsigned long
的大小在Windows和Unix上是不同的:unsigned long
的大小是64位。unsigned long
的大小是32比特。因此,Windows上的JDK 8只打印
uintx
标志的低32位。这就是为什么如果MaxHeapSize
正好是4 GiB的倍数,您将看到uintx MaxHeapSize := 0
。这只是打印错误;实际最大堆大小是正确。作为JDK-8042893变更的一部分,该错误已在JDK 9中得到修复: