You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何移除变量m的打印语句后Java循环执行时间大幅缩短?是否跳过循环?

为什么打印变量m和不打印时执行耗时差异巨大?

这其实是JVM即时编译器(JIT)的**死代码消除(Dead Code Elimination)**优化在起作用,循环并没有被跳过,但当你不需要变量m的最终值时,JVM会把循环里的无效操作直接“砍掉”,从而大幅缩短执行时间。

两种场景的具体分析:

  • 保留System.out.println("m : " + m);的情况
    因为程序最后需要读取并输出m的值,JVM必须确保循环中所有影响m的操作都被执行。也就是说,它得完整遍历嵌套循环的每一次迭代,判断i % 2 == 0 && j % 3 == 0的条件,并且在满足条件时给m赋值——这些操作都是程序输出所必需的,所以JVM不能对它们做优化,自然耗时就很长(13秒左右)。

  • 注释掉打印m语句的情况
    这时候变量m是一个完全没有被后续代码使用的局部变量:循环里的m = i + j;赋值操作,既不会改变程序的输出,也不会影响其他逻辑。JVM的JIT编译器会敏锐地识别出这种“死代码”——既然这些操作的结果对程序最终没有任何意义,那整个嵌套循环的执行就变得毫无必要。
    于是JIT会直接把整个嵌套循环的代码从执行流程中消除,你的程序实际上只运行了打印提示语句和计算时间的代码,所以耗时骤降到7毫秒左右。

关键结论:

循环并没有被“跳过”,而是被JVM的优化机制消除了,因为它的执行结果对程序的最终输出没有任何贡献。这是JVM为了提升运行效率,在运行时对代码进行的激进优化之一。

内容的提问来源于stack exchange,提问作者Shubham

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 09:12:19