JIT未优化涉及Integer.MAX_VALUE的循环

JIT未优化涉及Integer.MAX_VALUE的循环,第1张

JIT未优化涉及Integer.MAX_VALUE的循环

我还没有挖掘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处理。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5104329.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-17
下一篇 2022-11-17

发表评论

登录后才能评论

评论列表(0条)

保存