关于移位和直接相乘的问题
int x = 1, y; y = 0; long time; for(int k=0; k<8; k++) { time = System.currentTimeMillis(); for(long j=0; j<2000000000; j++) y = 2 * x; System.out.println("所用时间1:" + (System.currentTimeMillis() - time)); time = System.currentTimeMillis(); for(long j=0; j<2000000000; j++) y = x << 1; System.out.println("所用时间2:" + (System.currentTimeMillis() - time)); System.out.println(); }
int x = 1, y; y = 0; long time; for(int k=0; k<8; k++) { time = System.currentTimeMillis(); for(long j=0; j<2000000000; j++) y = x << 1; System.out.println("所用时间1:" + (System.currentTimeMillis() - time)); time = System.currentTimeMillis(); for(long j=0; j<2000000000; j++) y = 2 * x; System.out.println("所用时间2:" + (System.currentTimeMillis() - time)); System.out.println(); }
所用时间1:5953所用时间1:5953所用时间1:5937所用时间1:5953所用时间1:5954------所用时间2:5969所用时间2:5953所用时间2:5968所用时间2:5954所用时间2:5968------执行时间基本相同
[解决办法]
这个要学习
[解决办法]
基本上搞明白了,但有一些不清楚的地方,我的结论是,
1、如果连续两个相邻的相类似的结构的循环,java会做某种优化,具体怎么优化的不太清楚。
2、对于循环体比较简单的循环,时间大部分花在了循环控制上。
3、+,-,*这样的运算,时间差不多,区别不是太大。但/和%运算花的时间是前者7~8倍之多。
4、for(long n=200000000;n>0;n--)这种结构的循环,在循环控制上花的时间,是与之相反的循环的近一倍。
看我的测试:
public class test6{ public static void main(String [] args) { int x = 333333333, y; y = 0; long time; for(int k=0; k<8; k++) { time = System.currentTimeMillis(); for(long j=0; j<2000000000; j++) y = x *5; System.out.println("所用时间1:" + (System.currentTimeMillis() - time)); //****插入下面这个循环,目的是使前后两循环在执行顺序上相隔开。打乱java的优化。 for(long m=10000;m>1000;m--){ for(int n=0;n<100000;n++); } time = System.currentTimeMillis(); for(long j=0; j<2000000000; j++) y = x<<2; System.out.println("所用时间2:" + (System.currentTimeMillis() - time)); System.out.println(); } }}
[解决办法]
老哥。。你电脑的问题吧。。。我们学校电脑的存储过程。。第二次比第一次执行的都快。。。电脑有时候也出问题。。。
[解决办法]
测试的时候,应该关闭大多数的应该程序.
[解决办法]
不错
[解决办法]
学习了
[解决办法]
y=2* x;
System.out.println("所用时间2:"+ (System.currentTimeMillis()- time));
System.out.println();
}
结果:
所用时间1:10000
所用时间2:8703
所用时间1:9188
所用时间2:8468
所用时间1:9969
所用时间2:9125
所用时间1:9891
所用时间2:8875
所用时间1:9906
所用时间2:9125
我想问下为什么放在后面的表达式所用的时间更短。
通过横向和纵向比较,得出剩法运算比移位运算慢,这符合cpu计算原理,关键在于时间1比2快,期间函数只调用过库函数,我想更应该说过程2比1快,初始调用应该比以后的调用慢吧,只是说说,无确实证据!
[解决办法]