我还没有挖掘Java语言规范,但是我猜想它与这种差异有关:
i++ < (Integer.MAX_VALUE - 1)
永远不会溢出。一旦i
到达,Integer.MAX_VALUE - 1
它将增加到Integer.MAX_VALUE
,然后循环终止。i++ < Integer.MAX_VALUE
包含整数溢出。一旦i
到达Integer.MAX_VALUE
,它就会加一,导致溢出, 然后 循环终止。
我假设JIT编译器“不愿意”在这种极端情况下优化循环-
在整数溢出条件下有很多bug会导致
wrt循环优化,因此可能确实需要这样做。
可能还有一些硬性要求,不允许对整数溢出进行优化,尽管我对此有些怀疑,因为整数溢出无法直接检测到或用Java处理。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)