今天看啥  ›  专栏  ›  进击的Java新人

Java中一个令人惊讶的bug

进击的Java新人  · 知乎专栏  ·  · 2019-10-26 16:09
今天分享一个JDK中令人惊讶的BUG,这个BUG的神奇之处在于,复现它的用例太简单了,人肉眼就能回答的问题,JDK中却存在了十几年。经过测试,我们发现从JDK8到14都存在这个问题。大家可以在自己的开发平台上试试这段代码:public class Hello { public void test() { int i = 8; while ((i -= 3) > 0); System.out.println("i = " + i); } public static void main(String[] args) { Hello hello = new Hello(); for (int i = 0; i < 50_000; i++) { hello.test(); } } }再使用以下命令执行: java Hello然后,就会看到这样的输出:当然,在程序的开始阶段,还是能打印出正确的"i = -1"。这个问题最终Huawei JDK的两名同事解决掉了,并且回合到社区。我这里大概讲一下分析的思路。首先,使用解释执行可以发现,结果都是正确的,这就说明,这基本上是JIT编译 ………………………………

原文地址:访问原文地址
快照地址: 访问文章快照
推荐文章