日期:2014-05-20 浏览次数:20762 次
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(); } } }