JAVA低层挑战,有兴趣的高手来看看!

FS-Leehom 2010-11-12 03:57:46
一个很简单的问题,但是却又不简单。之所以叫简单的问题是因为内容少,答案不简单是很多人回答不了。废话少说,上题:

双重for循环效率问题,外面一千万次,里面一百次……


for(int i=0;i<10000000;i++)
for(int j=0;j<100;j++);



for(int i=0;i<100;i++)
for(int j=0;j<10000000;j++);


大家看后说说哪个效率要高些还是说两个都是一样。我本人第一感觉是第一个要快些,后来一想是不是一样的呢?因为计算次

数都相等,后来一实验,结果却出人意料。

网上有人说下面的快,原因是因为跳的次数少,但是结果却相反,你怎么看呢?
...全文
676 36 打赏 收藏 转发到动态 举报
写回复
用AI写文章
36 条回复
切换为时间正序
请发表友善的回复…
发表回复
wenin819 2010-12-19
  • 打赏
  • 举报
回复
学习了。
WorkHardbjk 2010-12-19
  • 打赏
  • 举报
回复
我觉得JVM有些不确定性,所以难免误差。
那我想问,java for循环和C for 循环高层原理一样,用C试一试,看看到底是不是两种双层for真的不同。
周凯_csdn 2010-12-19
  • 打赏
  • 举报
回复
这个似乎意义真不大,要看具体的环境,


CUP的调度,,,这都很难确定的
IceArmour 2010-12-19
  • 打赏
  • 举报
回复
循环内大外小效率要高,这方面本站已经有很多文章了
jimiStephen 2010-12-19
  • 打赏
  • 举报
回复
有意思
acj14591 2010-12-08
  • 打赏
  • 举报
回复
。。java还有能量守恒定律????
chenzhp 2010-12-07
  • 打赏
  • 举报
回复
能量守恒。
岳丰源 2010-12-07
  • 打赏
  • 举报
回复
运行了多次都是第二种效率高,用时少
lxningasjj 2010-12-07
  • 打赏
  • 举报
回复
int mark = 0;
long begin = System.currentTimeMillis();
for(int i=0;i<10000000;i++)
for(int j=0;j<100;j++){
mark++;
}
long use = System.currentTimeMillis()- begin;
System.out.println(use);
mark = 0;

long begin1 = System.currentTimeMillis();
for(int i=0;i<100;i++)
for(int j=0;j<10000000;j++){
mark++;
}
long use1 = System.currentTimeMillis()- begin1;
System.out.println(use1);


1453
1329

1500
1343

1468
1282
jdk1.6 三次的结果
lxy15329 2010-12-07
  • 打赏
  • 举报
回复
这个问题确实够深奥的,小生知识尚浅,还不足以论道啊!继续学习
gamefx 2010-12-07
  • 打赏
  • 举报
回复
这个要结合机器性能和软件版本不同而论吧
i李小武 2010-12-07
  • 打赏
  • 举报
回复
学习了
micarol 2010-11-13
  • 打赏
  • 举报
回复
都说了结果是谁快。原因呢?楼主那解释貌似可以接受
  • 打赏
  • 举报
回复
测试代码有问题,由于 Java HotSpot 的关系,写在 main 方法前面的代码执行会耗时一些,后面的代码会快一些,你把两种循环换个个,就会发现了。
降龙 2010-11-12
  • 打赏
  • 举报
回复
学习了。。。。
龙四 2010-11-12
  • 打赏
  • 举报
回复
纯属扯淡,在c语言中可能确实第二种是一种优化,但在java中,是不能拿c语言的东西来套的,jvm本身只是一纸规范,若自己实现一个jdk,完全可以优化第一种方式,让它的效率比第二种高,IBM J9 1.5的实现第一种方式就比第二种方式效率稍高点


[Quote=引用 16 楼 leehomwong 的回复:]

为神马我记得以前有人说第二种是第一种的优化啊
[/Quote]
zhuwen9 2010-11-12
  • 打赏
  • 举报
回复
jdk 1.5.0.06
方法一耗时:2965354815
方法二耗时:2895023809
24K純帥 2010-11-12
  • 打赏
  • 举报
回复
为神马我记得以前有人说第二种是第一种的优化啊
meteor1015 2010-11-12
  • 打赏
  • 举报
回复
这个好玩 ,不同的JDK实现 结果貌视 结果不一样
FS-Leehom 2010-11-12
  • 打赏
  • 举报
回复
错了错了,呵呵 ……

都是需要创建的值的,只是顺序不一样而已~~~

继续学习底层东西,有兴趣,有精力大家继续,哈哈……
加载更多回复(13)

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧