rth*_*sen 4 java iteration compiler-optimization
例如:
for(int i = 0; i < 20 * 40 * 60 * 80; i++){ ... }
Run Code Online (Sandbox Code Playgroud)
相比:
for(int i = 0; i < 3840000; i++){ ... }
Run Code Online (Sandbox Code Playgroud)
第一个循环比第二个循环运行得慢得多(做了一些时间试验),即使条件的值在整个迭代的任何阶段都不会改变.当然,使用方法会有所不同,因为该值可能会发生变化(即使它可能不应该).我只是想知道为什么Java不缓存/临时该值.
long fact10 = factorial(10);
for(long n = 0; n < fact10; n++) vs for(long n = 0; n < factorial(10); n++)
Run Code Online (Sandbox Code Playgroud)
Java不能做第二次优化,因为它不知道它没有factorial副作用.就第一个基准测试而言,我确信这是某种错误:Java编译器在编译时计算常量表达式的结果,因此前两个循环是等效的.