gpt4 book ai didi

java - 输出时序问题

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:07:30 27 4
gpt4 key购买 nike

以下代码:

String str1="asdfavaxzvzxvc";
String str2="werwerzsfaasdf";
Object c=str1;
Object d=str2;
System.out.println(c);
long time1=System.currentTimeMillis();
for(int i=0;i<1000000000;i++){
if(c.equals(d)){
//System.out.println("asfasdfasdf"); // line 9
}
}
long time2=System.currentTimeMillis();
System.out.println("time taken in this is "+(time2-time1));

当我取消注释第 9 行时,如果条件为真,则让打印,尽管它永远不会发生,因为两个对象不相等,然后它需要 5000+ 毫秒,并且令我惊讶的是仅仅注释它只需要 5 毫秒,我不明白为什么如果没有评论它会花费这么多时间,因为它永远不会被执行...

这是某种分支预测效果吗?或任何类型的编译器优化

最佳答案

编译器优化掉了dead code — 在这种情况下,整个循环被删除。这可能由字节码编译器(例如 javac)完成,或者更有可能由 HotSpot 完成。的 JIT .

为什么它仍然需要 5 毫秒来执行?它不一定需要那么长时间。相反,您可能会达到 System.currentTimeMillis() 的分辨率限制。 Try it with System.nanoTime() instead. FWIW,在我的 Windows 系统上使用 nanoTime()currentTimeMillis() 一致。

您可能有兴趣阅读 How do I write a correct micro-benchmark in Java?Is stopwatch benchmarking acceptable?

进一步阅读

关于java - 输出时序问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5982096/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com