GraphKit

Java中,一个存在十几年的bug...

对着背影说爱祢 提交于 2020-03-20 18:00:38
3 月,跳不动了?>>> 作者:海纳 https://zhuanlan.zhihu.com/p/88555159 今天,分享一个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的两名同事解决掉了,并且回合到社区。我这里大概讲一下分析的思路。关注微信公众号:Java技术栈,在后台回复:java,可以获取我整理的 N 篇最新 Java 教程,都是干货。 首先,使用解释执行可以发现,结果都是正确的,这就说明